1

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

例如,扩展将适用于:

[ProtoContract]
class myClass{
     //stuff
}

...但不是在...

class someRandomClass
{
}

这里的不同之处在于,通常你可以像这样做一个扩展函数:

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

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

这可能吗?

4

2 回答 2

4

可以在您的方法中使用反射进行运行时检查Serialize,但不能在编译时进行检查,因为属性不是类型签名的一部分。

如果要进行编译时检查,则必须使用没有方法而不是属性的(有点难看的)接口。

于 2013-11-12T22:03:57.230 回答
2

您将无法使用 过滤它where,您只需要抛出一个异常。考虑一下:

public static byte[] Serialize<T>(this T instance)
{
    if (!Attribute.IsDefined(typeof(T), typeof(ProtoContractAttribute)))
    {
        throw new Exception(...);
    }
}
于 2013-11-12T22:05:21.033 回答