C#获取对象对的名称

时间:2014-12-03 13:17:46

标签: c# object dynamic

var myObject =  new { Id = 0, Name = "Test" };

我想在项目的其他部分获取关键名称为变量:

var keyName = someObject[0];  //someObject is passed myObject;
var value = someObject[1];
//Output keyName = Id; value = 0;

我知道字典会很好,但我必须坚持myObject的延迟;

2 个答案:

答案 0 :(得分:4)

您可以通过以下方式访问对象的属性:

myObject.GetType().GetProperties()

和名称,例如

myObject.GetType().GetProperties()[0].Name //("Id")

答案 1 :(得分:0)

使用反射无法做到这一点,因为变量在编译为IL后不会有名称。但是,您可以使用表达式树并将变量提升为闭包:

static string GetVariableName<T>(Expression<Func<T>> expr)
{
    var body = (MemberExpression)expr.Body;

    return body.Member.Name;
}

您可以按如下方式使用此方法:

static void Main()
{
    var someVar = 3;

    Console.Write(GetVariableName(() => someVar));
}

请注意,这非常慢,因此请勿在应用程序的性能关键路径中使用它。

有关更完整的示例,请参阅here