簡體   English   中英

在運行時獲取C#中屬性的字符串表示形式

[英]Get a string representation of a property in C# at run-time

我已經看過這個問題的反面很多次了,但是還沒有看到如何做我想做的事情。

假設我有以下代碼:

var myNewData = from t in someOtherData
            select new
            { 
                fieldName = t.Whatever,
                fieldName2 = t.SomeOtherWhatever
            };

如果我希望數據綁定到此類,我的列定義必須包括硬編碼字符串,如“fieldName”和“fieldName2”。

有沒有辦法調用反射或其他東西,以便我可以做一些與下面的代碼相同的事情(我知道下面的代碼是無效的,但我正在尋找一個有效的解決方案)。

string columnName = GetPropertyName(myNewData[0].fieldName);

我的目標是,如果變量名在匿名類上發生更改,則會在修復所有引用之前出現編譯時錯誤,這與當前數據綁定不同,后者依賴於直到運行時才檢查的字符串。

任何幫助,將不勝感激。

string columnName = GetPropertyName(() => myNewData[0].fieldName);

// ...

public static string GetPropertyName<T>(Expression<Func<T>> expr)
{
    // error checking etc removed for brevity

    MemberExpression body = (MemberExpression)expr.Body;
    return body.Member.Name;
}

你得到這樣的屬性名稱:

using System.Reflection;    

var myNewData = from t in someOtherData
        select new
        { 
            fieldName = t.Whatever,
            fieldName2 = t.SomeOtherWhatever
        };


foreach (PropertyInfo pinfo in myNewData.FirstOrDefault()
                               .GetType().GetProperties()) 
{ 
    string name = pinfo.Name; 
}

// or if you need all strings in a list just use:
List<string> propertyNames = myNewData.FirstOrDefault()
             .GetType().GetProperties().Select(x => x.Name).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM