[英]How can I make a Linq extension for objects with a specific attribute?
我有興趣對具有屬性的對象進行擴展(在本例中為[ProtoContract]
)。
例如,擴展名將適用於:
[ProtoContract]
class myClass{
//stuff
}
...但不是...
class someRandomClass
{
}
此處的區別是通常可以使擴展功能如下:
public static byte[] Serialize<T>(this T instance){
...但是在這種情況下,我希望它僅適用於具有[ProtoContract]
屬性的類。
這可能嗎?
可以在您的Serialize
方法內部進行反射來進行運行時檢查,但由於屬性不是類型簽名的一部分,因此無法進行檢查編譯時間。
如果要進行編譯時檢查,則必須使用(沒有任何方法)接口(稍微難看)而不是屬性。
您將無法使用where
過濾它,而只需要拋出一個異常。 考慮一下:
public static byte[] Serialize<T>(this T instance)
{
if (!Attribute.IsDefined(typeof(T), typeof(ProtoContractAttribute)))
{
throw new Exception(...);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.