c# - 如何为具有特定属性的对象创建 Linq 扩展?

标签 c# .net linq extension-methods

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

例如,该扩展适用于:

[ProtoContract]
class myClass{
     //stuff
}

...但不在...

class someRandomClass
{
}

这里的区别是通常你可以像这样做一个扩展函数:

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

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

这可能吗?

最佳答案

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

如果你想进行编译时检查,你将不得不使用一个没有方法的(有点难看的)接口(interface)而不是一个属性。

关于c# - 如何为具有特定属性的对象创建 Linq 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940843/

相关文章:

c# - 一行中的异常(堆栈跟踪)

c# - 在 C# 中使用句柄和系统观察器

.net - 什么是 webclient 以及 webclient 在 .net 中的用途

c# - .NET 平台中的哪些类使用 Singleton 设计模式?

c# - StructureMap InstanceScope.Hybrid 和 IDisposable

c# - 仅运行 .Net 2.0 与 3.5 我错过了什么?

C# ToCharArray 不适用于 char*

c# - 为什么 Directory::EnumerateFiles 和 DirectoryInfo::EnumerateFiles 抛出不同的异常?

c# - 我如何将代码更改为linq样式

c# - LINQ to Entities 仅支持无参数构造函数和初始值设定项