2008-10-21 36 views

回答

36

不,恐怕不行。你可以用约束做的唯一的事情是:

  • where T : class - T必须是引用类型
  • where T : struct - T必须是一个非空值类型
  • where T : SomeClass - T必须是SomeClass的或派生它
  • where T : ISomeInterface - T必须ISomeInterface或实现它
  • where T : new() - T必须有一个公共的无参数构造函数

各种组合是可行的,但不是全部。没有关于属性。

+1

会`哪里T:ISerializable`不是吗? – crdx 2012-06-07 14:35:01

+1

@ user457104:这不会强制应用该属性,否。 – 2012-06-07 15:33:27

+0

啊,是的,哎呀。 – crdx 2012-06-07 19:11:25

7

我所知道的;你不可以做这个。 你有没有关于添加'初始化'方法或类似的东西?

public void Initialize<T>(T obj) 
{ 
    object[] attributes = obj.GetType().GetCustomAttributes(typeof(SerializableAttribute)); 
    if(attributes == null || attributes.Length == 0) 
      throw new InvalidOperationException("The provided object is not serializable"); 
} 

我还没有测试过这个代码,但我希望你明白我的观点。

0

如果你正在寻找任何可序列化的类,我认为你运气不好。如果您正在查找已创建的对象,则可以创建一个可序列化的基类,并让您希望支持的每个类都从其派生。

0

我知道这是旧的,但我使用静态构造函数来检查。它稍后,但允许您在运行时抛出一个错误。

相关问题