C#按名称获取对象属性

C#按名称获取对象属性,c#,C#,在其他语言(如JavaScript)中,我可以使用例如: constobj={a:5}; obj[“a”]//返回5 如果对象属性的名称在C#中以字符串形式给出,是否可以获取该属性?我不想要一棵巨大的if/else树你可以使用反射: var obj = new { A = 5 } as object; // your object var five = obj.GetType().GetProperty("A").GetValue(obj); 此外,您还可以使用动态

在其他语言(如JavaScript)中,我可以使用例如:

constobj={a:5};
obj[“a”]//返回5

如果对象属性的名称在C#中以字符串形式给出,是否可以获取该属性?我不想要一棵巨大的if/else树

你可以使用反射:

 var obj = new { A = 5 } as object; // your object

 var five = obj.GetType().GetProperty("A").GetValue(obj);
此外,您还可以使用动态:

var fiveDynamic = (obj as dynamic).A;

当然,你可以这样做

public static object GetPropValue(object src, string propName)
{
    return src.GetType().GetProperty(propName).GetValue(src, null);
}
但你会遇到比你解决的问题多得多的新问题。主要是:您不知道值的类型。这在Javascript中并不重要,但是对于C#你不能这么说。 如果你确定要多做一步,把你的代码弄得一团糟,那么就这样做

var type = src.GetType().GetProperty(propName).GetType();
var value = src.GetType().GetProperty(propName).GetValue(src, null);

Convert.ChangeType(value, type);

您可以使用反射-但这可能不是最好的方法。你最好还是用字典。在不了解更大上下文的情况下,很难说。我正在尝试编辑列表中的一个项目,在该项目中,我将收到编辑后的属性名称作为字符串是的,谢谢!我不知道当googlingI不推荐反射时,我怎么会没有偶然发现这一点,你可以简单地创建一个字典并使用与之相关的键获取值。这是一个XY问题,C#是一种类型化语言,与JavaScript完全不同。我建议学习如何使用它作为一种打字语言,你可能会有一个更容易的时间。。或者,如果您愿意,添加更多关于您实际试图解决的问题的信息,您可能会发现人们可以建议更好的解决方案“您不知道值的类型”为什么要这样假设?编译器不知道类型,但开发人员可能知道。同样
Convert.ChangeType
在这里什么也做不到;您可以使用反射获取对象的类型,然后将对象转换为现有类型。您可能正在寻找类型转换,但在这种情况下,开发人员确实声称知道类型。