类型为T的通用,其中T具有特定属性

是否可以创建T类型的generics方法,其中T具有特定属性?

例如:

 public static XmlDocument SerializeObjectToXml(T obj) { //... } 

我想只序列化具有Serializable和/或DataContract属性的类:

 [Serializable] [DataContract(Name = "viewModel", Namespace = "ns")] internal class ViewModel { //... } 

我不敢。 有三种类型的约束:派生,构造函数和引用/值类型。

我相信,您应该检查方法体中的属性,如果可序列化对象不符合条件,则调用另一种方法来处理它。

也许您可以通过创建具有Seri​​alizable属性的基类来间接地执行它,并向您的generics类添加约束,以便type-parameter应该从该基类inheritance:

 [Serializable] public class MyBase {} public static XmlDocument SerializeToXml( T obj ) where T : MyBase {} 

静静地说,我不这么认为。 但是你可以在运行时检查类型T:

 var isDataContract = typeof(T).GetCustomAttributes(typeof(DataContractAttribute), true).Any(); if (!isDataContract) throw new InvalidOperationException("You can only serialize classes that are marked as data contracts."); //... continue serialization