为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取特定属性的PropertyInfo?

如何获取特定属性的PropertyInfo?

FFIVE 2019-10-08 09:51:16
我想获取特定属性的PropertyInfo。我可以使用:foreach(PropertyInfo p in typeof(MyObject).GetProperties()){    if ( p.Name == "MyProperty") { return p }}但是必须有一种方法可以做类似的事情typeof(MyProperty) as PropertyInfo在那儿?还是我坚持进行类型不安全的字符串比较?干杯。
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

您可以使用新的nameof()操作符是在Visual Studio的C#6部分,2015年提供更多信息这里。


对于您的示例,您将使用:


PropertyInfo result = typeof(MyObject).GetProperty(nameof(MyObject.MyProperty));

编译器将转换nameof(MyObject.MyProperty)为字符串“ MyProperty”,但由于Visual Studio,ReSharper等知道如何重构nameof()值,因此您无需重构就可以重构属性名,从而获得了好处。


查看完整回答
反对 回复 2019-10-08
?
Qyouu

TA贡献1786条经验 获得超11个赞

带有lambdas /的.NET 3.5方式Expression不使用字符串...


using System;

using System.Linq.Expressions;

using System.Reflection;


class Foo

{

    public string Bar { get; set; }

}

static class Program

{

    static void Main()

    {

        PropertyInfo prop = PropertyHelper<Foo>.GetProperty(x => x.Bar);

    }

}

public static class PropertyHelper<T>

{

    public static PropertyInfo GetProperty<TValue>(

        Expression<Func<T, TValue>> selector)

    {

        Expression body = selector;

        if (body is LambdaExpression)

        {

            body = ((LambdaExpression)body).Body;

        }

        switch (body.NodeType)

        {

            case ExpressionType.MemberAccess:

                return (PropertyInfo)((MemberExpression)body).Member;

            default:

                throw new InvalidOperationException();

        }

    }

}


查看完整回答
反对 回复 2019-10-08
?
森栏

TA贡献1810条经验 获得超5个赞

你可以这样做:


typeof(MyObject).GetProperty("MyProperty")

但是,由于C#没有“符号”类型,因此没有什么可以帮助您避免使用字符串。顺便说一下,为什么将这种类型称为不安全类型?


查看完整回答
反对 回复 2019-10-08
  • 3 回答
  • 0 关注
  • 1375 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信