本文介紹一種通用的方法,用於動態訪問和提取類的屬性值。
定義一個接受類型參數的通用方法:
public string GetDomainName()
方法內部:
使用 typeof(T).GetCustomAttributes
檢索自定義屬性:
var dnAttribute = typeof(T).GetCustomAttributes(
typeof(DomainNameAttribute), true
).FirstOrDefault() as DomainNameAttribute;
如果屬性存在,則返回其值:
if (dnAttribute != null)
{
return dnAttribute.Name;
}
否則,返回 null:
return null;
為了更廣泛的適用性,將該方法泛化以處理任何屬性:
public static class AttributeExtensions
{
public static TValue GetAttributeValue(
this Type type,
Func valueSelector)
where TAttribute : Attribute
}
擴展方法內部:
檢索自定義屬性:
var att = type.GetCustomAttributes(
typeof(TAttribute), true
).FirstOrDefault() as TAttribute;
如果屬性存在,則使用提供的 valueSelector
來提取所需的值:
if (att != null)
{
return valueSelector(att);
}
否則,返回該類型的默認值:
return default(TValue);
MyClass
的 DomainName
屬性:string name = typeof(MyClass).GetDomainName();
MyClass
的任何屬性值:string name = typeof(MyClass)
.GetAttributeValue((DomainNameAttribute dna) => dna.Name);
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3