我正在尝试做这样的事情:
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
}
我如何知道从我的验证方法中的调用代码传入的属性的名称?
最佳答案
正如 Chris Sinclair 提到的,您可以使用 LINQ 表达式,这是此类代码的示例:
public static class Validate
{
public static void AgainstNull(System.Linq.Expressions.Expression<Func<string>> expr)
{
var str = expr.Compile().Invoke();
if (str == null)
{
string name = (expr.Body as System.Linq.Expressions.MemberExpression).Member.Name;
throw new ArgumentNullException(name);
}
}
}
关于c# - 获取属性名称而不通过反射传递它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19941254/