在 Visual Studio 2015 和 c# 6 中引入了“nameof”表达式
nameof (C# and Visual Basic Reference)
如何在 .net Framework 4 等旧版本中使用它或编写类似的方法。
最佳答案
如果您谈论的是 C#6 之前的 C# 的等效项,这将完成属性的工作(以一种 hacky 的方式)。它可能会扩展到包括字段、方法等。
public static class TestExtension
{
public static String nameof<T, TT>(this T obj, Expression<Func<T, TT>> propertyAccessor)
{
if (propertyAccessor.Body.NodeType == ExpressionType.MemberAccess)
{
var memberExpression = propertyAccessor.Body as MemberExpression;
if (memberExpression == null)
return null;
return memberExpression.Member.Name;
}
return null;
}
}
只是快速完成了这个,所以还有很多需要改进的地方,但是你可以这样使用它:
public class myClass
{
public string myProp { get; set; }
}
var a = new myClass();
var result = a.nameof(b => b.myProp);
结果包含'myProp'
更新:
更全面(虽然还是不够漂亮)
public static class TestExtension
{
public static String nameof<T, TT>(this Expression<Func<T, TT>> accessor)
{
return nameof(accessor.Body);
}
public static String nameof<T>(this Expression<Func<T>> accessor)
{
return nameof(accessor.Body);
}
public static String nameof<T, TT>(this T obj, Expression<Func<T, TT>> propertyAccessor)
{
return nameof(propertyAccessor.Body);
}
private static String nameof(Expression expression)
{
if (expression.NodeType == ExpressionType.MemberAccess)
{
var memberExpression = expression as MemberExpression;
if (memberExpression == null)
return null;
return memberExpression.Member.Name;
}
return null;
}
}
访问静态属性/字段:
TestExtension.nameof(() => myClass.MyOtherField)
在函数中访问参数:
void func (int a) {
TestExtension.nameof(() => a);
}
关于c# - .net framework 4 中的 nameof 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261955/