1
我知道我可以:如何指定泛型應該用屬性標記?
public class SampleClass<TSerializable>
where TSerializable : ISerializable
怎麼能寫我只接受標有SerializableAttribute替代類一SampleClass?
我知道我可以:如何指定泛型應該用屬性標記?
public class SampleClass<TSerializable>
where TSerializable : ISerializable
怎麼能寫我只接受標有SerializableAttribute替代類一SampleClass?
你不能在編譯器做到這一點,短的東西像一個的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
}
}
你回答了我的下一個問題http://stackoverflow.com/questions/1827296/how-to-check-if-a-type-is-marked -with-一個屬性 – 2009-12-01 16:27:12