繁体   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