前幾天我問了一個問題,標題爲How to constraint a generic to be of type enum?。總結問題是下面的代碼:使用代碼合同來使通用類型枚舉
class MyClass<T> where T : enum // Not possible in C#
{
}
我被介紹給代碼合同,我可能會產生一個編譯時間問題,這是所有我想警告(在編譯時被告知T
應是enum
)。我嘗試了以下代碼(Full source)。
class MyClass<T>
{
public MyClass()
{
Contract.Requires(typeof(System.Enum).IsAssignableFrom(typeof(T)));
}
}
它只會產生無用的運行時錯誤。我應該能夠產生編譯時警告,但我不能讓它工作。誰能告訴我我做錯了什麼?
這裏的項目的代碼契約設定的畫面:
您是否使用該問題的接受答案中提出的庫? – Oded 2012-01-03 18:19:10
@Oded,我試過了,但沒有示例代碼,所以我甚至不知道從哪裏開始。雖然這是另一個問題,但我發現這是一個更好的方法,因爲它已經是.NET框架的一部分。 – atoMerz 2012-01-03 18:21:25
@AtoMerZ:Unconstrained Melody旨在用作庫,但您可以對自己的代碼使用相同的IL重寫。只需看看代碼 - 它非常簡單。 – 2012-01-03 18:23:12