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的延迟;
答案 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。