亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取特定屬性的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 關注
  • 1411 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號