我想要做这样的事情:
public static class Validate
{
public static void AgainstNull(string str)
{
if (String.IsNullOrWhiteSpace(str))
{
// how do I know the property name in the calling code?
throw new ArgumentNullException("property name from caller");
}
}
}
这样我就可以在我的代码库中使用类似于这样的模式:
public void Foo(string bar)
{
Validate.AgainstNull(bar);
// other processing here
}
如何在我的验证方法中获取调用代码传入的属性名称?
Validate.AgainstNull(() => bar)
的LINQ表达式,但我不确定实际编译、调用和检查这些表达式所带来的性能损失是否值得。在过去,我曾经简单地传递要检查的对象及其名称作为字符串进行操作。您考虑过使用代码契约吗? - Chris SinclairFoo
(它不是一个“属性”)还是调用Foo
的属性? - D Stanley