2017-08-03 65 views
0

比方说,我有这样的方法得到的字符串作为一个扩展参数:是否有可能从扩展方法获取属性的名称

private static List<string> ValidationErrors = new List<string>(); 

private static void ErrorCheck<T>(this string str) 
{ 
    if (string.IsNullOrEmpty(str)) 
    { 
     // This just returns "str"                  
     // Instead of property name (see "How I use" section") 
     ValidationErrors.Add(typeof(T).Namespace + "[" + nameof(str) + "]"); 
    } 
} 

这是我如何使用它:

Car.Color.ErrorCheck<Car>(); 

在哪里汽车对象的颜色只是字符串属性。所以我想要的是在我的扩展方法中使用“Color”而不是“str”。

任何想法,我可以做到这一点?

+1

'Car.Color.ErrorCheck ()',你可以不匹配类型的事实(如'Car.Color.ErrorCheck ()')应该线索你在你当前的系统是有缺陷的。将字符串作为参数传递时,无法知道该字符串最初来自哪里(在您的案例中为“Car.Color”)。一个更加可行的解决方案(并且不太容易出现开发人员错误)就像'Car.ErrorCheck(x => x.Color)' – Flater

+0

是的,谢谢!在评论之前没有想到这一点。似乎是合法的。 –

回答

2

没有它不可能。 C#有几个选择:使用Expression<...>和lambda表达式

+1

你为什么重新打开这个问题?这是一个有效的副本。只是回答自己并链接重复的目标? –

+2

@PatrickHofman它不是一个确切的副本。这也是'nameof'方法。 –

+2

然后,您应该将其添加到重复的目标,而不是重新打开问题。 –