2009-12-01 32 views

回答

3

你不能在編譯器做到這一點,短的東西像一個的FxCop添加英寸

你能做的最好的是在運行時檢查(一次),可能通過一個驗證的T靜態構造函數問題引發錯誤的單元測試搭上:

public class SampleClass<TSerializable> { 
    static SampleClass() { 
     if(!Attribute.IsDefined(typeof(TSerializable), 
       typeof(SerializableAttribute))) { 
      throw new InvalidOperationException("Not [Serializable]:" + 
       typeof(TSerializable).Name); 
     } 
    } 
} 

[Serializable] class Foo { } 
class Bar { } 

static class Program { 
    static void Main() { 
     new SampleClass<Foo>(); // ok 
     new SampleClass<Bar>(); // fail 
    } 
} 
+0

你回答了我的下一個問題http://stackoverflow.com/questions/1827296/how-to-check-if-a-type-is-marked -with-一個屬性 – 2009-12-01 16:27:12