[英]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.