正如標題所示,我想做到以下幾點,但編譯器不會讓我:如何通用約束添加到非通用類的構造函數在C#
public class MyClass
{
private List<SomeSupertype> myList;
public MyClass<T> (ICollection<T> elements) where T : SomeSupertype
{
myList = new List<SomeSuperType>();
foreach (SomeSupertype element in elements) {
myList.Add (element);
}
}
}
不知何故,似乎沒有可能將一個通用參數添加到本身不是通用類的構造函數中。請注意,MyClass應該是非泛型類型的,因爲客戶端在構建之後不應該區分不同類型的MyClass。
任何人都可以幫我解決這個問題嗎?這可能嗎?它當然是在Java中:)
編輯:我忘了提及我使用.NET 3.5,因此不支持協變泛型。
如果你使用.NET 4,爲什麼不只是有一個非泛型構造函數採用IEnumerable'? 'IEnumerable'1'是協變的,所以'IEnumerable '只要'T:SomeSupertype'都可以轉換爲'IEnumerable '。 –
@Anton:通過一些重新說明和解釋,似乎答案值得 –
是的,協方差可以解決問題。我可能應該提到我正在使用.NET 3.5 – Dino