C# 如何使用变量访问c中的对象成员#

C# 如何使用变量访问c中的对象成员#,c#,object,C#,Object,我有一个web服务,它返回一个自定义对象(结构类型)APIStruct用户。 我有一个变量,它保存着它正在检查的当前字段的名称currentField 现在,在user包含first\u name和last\u name的情况下,我可以使用user.first\u name或user.last\u name访问该值。但是,是否可以将字段名保存在变量中并通过变量访问值?工作方式如下: var currentField = "first_name"; var value = user.current

我有一个web服务,它返回一个自定义对象(结构类型)
APIStruct用户
。 我有一个变量,它保存着它正在检查的当前字段的名称
currentField

现在,在
user
包含
first\u name
last\u name
的情况下,我可以使用
user.first\u name
user.last\u name
访问该值。但是,是否可以将字段名保存在变量中并通过变量访问值?工作方式如下:

var currentField = "first_name";
var value = user.currentField;
显然,上述方法不起作用,那么有没有办法做到这一点?在过去,使用PowerShell等语言时,它的工作原理与上面的
$currentField=“first_name”$值=用户。$currentField


我试过
user.currentField
user.(currentField)
user[currentField]
user.$currentField
你要找的东西叫做反射

var type = user.GetType(); // Get type object
var property = type.GetProperty(currentField); // get property info object
var value = property.GetValue(user); // get value from object.
小心-与直接属性访问相比,反射速度非常慢。

您必须使用。创建如下方法:

public static object GetPropValue(object src, string propName)
{
    return src.GetType().GetProperty(propName).GetValue(src, null);
}
    myClass m = new myClass();
并称之为:

string currentField = "first_name";
GetPropValue(user, currentField);

但必须指出的是,这不是标准读取对象值的方式。

另一种选择是使用switch语句。比如:

switch (currentField){
    case "first_name":
            value = user.first_name;
            break;
    case "last_name":
            value = user.last_name;
            break;

等等。

您可以扩展对象类,以支持访问通过

设定值:

    m["fist name"] = "Name";
    m["level"] = 2;
    m["birthday"] = new DateTime(2015, 1, 1);
获取值:

    int level = (int)m["level"];
    string firstName = (string)m["first name"];
    DateTime dt = (DateTime)m["birthday"];

是的,这是可能的。请先做一点调查,然后再问一个其他很多人都问过的问题:)我做过调查,但找不到答案。仅仅因为这个问题存在于某个地方并不意味着我在搜索中使用了他们所使用的确切术语。我尽我所能寻找答案,但没有任何东西能正确回答我的问题。所以下次,请提供有用的建议或一个指向其他任务的简单链接,并标记为重复,而不是批评和羞耻地假设没有进行任何研究。我确实提供了一个指向问题答案的链接。我逐字搜索了“如何通过字符串值访问类属性”,这是第一个结果。我也不是在羞辱或批评你,很抱歉你这么做了。你也可以将你问题的标题复制粘贴到谷歌上,看到第一个结果也是你问题的答案;)你更快了,Oleh:)
type.GetProperty(currentField)
,而不是
user.GetProperty(currentField)
谢谢!对我来说很好。呃。。。这不是他想要的。
    int level = (int)m["level"];
    string firstName = (string)m["first name"];
    DateTime dt = (DateTime)m["birthday"];