c# - 获取属性名称而不通过反射传入?

原文 标签 c# reflection

我正在尝试做这样的事情:

    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/

相关文章:

java - Spring ApplicationContext getBean仅在自动连线之前

java - 反射-继承的字段全为null或为空

c# - 如何使 RichTextBox 仅显示文本?

java - 检查类是否为列表的实例

.net - 修改和运行现有的 .NET 程序集而不保存到磁盘

java - 反射的哈希码?

c# - 如何构建Windows窗体可识别电子邮件的文本框?

c# - 什么是最快的Winforms DataGrid?

c# - 产生随机单位

c# - 无法在ServiceStack Mvc应用程序中访问IHttpRequest