簡體   English   中英

如何為具有特定屬性的對象進行Linq擴展?

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

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