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