我有兴趣为具有属性的对象(在本例中为[ProtoContract])进行扩展。

例如,扩展名将适用于:

[ProtoContract]
class myClass{
     //stuff
}


...但不是...

class someRandomClass
{
}


此处的区别是通常可以使扩展功能如下:

public static byte[] Serialize<T>(this T instance){


...但是在这种情况下,我希望它仅适用于具有[ProtoContract]属性的类。

这可能吗?

最佳答案

您将无法使用where进行过滤,仅需引发一个异常。考虑一下:

public static byte[] Serialize<T>(this T instance)
{
    if (!Attribute.IsDefined(typeof(T), typeof(ProtoContractAttribute)))
    {
        throw new Exception(...);
    }
}

10-08 10:54