是否有可能从扩展方法获取属性的名称
比方说,我有这样的方法得到的字符串作为一个扩展参数:是否有可能从扩展方法获取属性的名称
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”。
任何想法,我可以做到这一点?
没有它不可能。 C#有几个选择:使用Expression<...>
和lambda表达式
-
nameof
nameof(Car.Color)
表达式树。看到这个帖子:Retrieving Property name from lambda expression
你为什么重新打开这个问题?这是一个有效的副本。只是回答自己并链接重复的目标? –
@PatrickHofman它不是一个确切的副本。这也是'nameof'方法。 –
然后,您应该将其添加到重复的目标,而不是重新打开问题。 –
'Car.Color.ErrorCheck()',你可以不匹配类型的事实(如'Car.Color.ErrorCheck ()')应该线索你在你当前的系统是有缺陷的。将字符串作为参数传递时,无法知道该字符串最初来自哪里(在您的案例中为“Car.Color”)。一个更加可行的解决方案(并且不太容易出现开发人员错误)就像'Car.ErrorCheck(x => x.Color)' –
Flater
是的,谢谢!在评论之前没有想到这一点。似乎是合法的。 –