這可能有一個問題,但我沒有能夠拿出搜索條件來找到答案..IEnumerable中不能使用泛型類型的約束?
我可能在這裏丟失了一些明顯的東西,但爲什麼我不允許請執行以下操作,這會給出錯誤:
"Argument 1: cannot convert from
System.Collections.Generic.IEnumerable<TType>
toSystem.Collections.Generic.IEnumerable< Test.A>
"
同時撥打DoSomething的電話?
public interface A
{
void Foo();
}
public class B : A
{
public void Foo()
{
}
}
class Test<TType> where TType : A
{
public Test(IEnumerable<TType> testTypes)
{
DoSomething(testTypes);
}
void DoSomething(IEnumerable<A> someAs)
{
}
}
雖然它是的,當然,OK做到這一點:
class Test
{
public Test(IEnumerable<B> testTypes)
{
DoSomething(testTypes);
}
void DoSomething(IEnumerable<A> someAs)
{
}
}
差異。如果'TTypes'是'struct',那麼'IEnumerable'不能被轉換成'IEnumerable '。如果你爲'TType'增加額外的'class'約束,那麼cast將被允許。 –
PetSerAl
謝謝 - 這是有道理的。對我來說代碼不是一個很大的問題,我只是很好奇,當我試圖做到這一點,並得到了錯誤。編輯:看到你編輯你的迴應,建議在where子句中使用class - 謝謝! – Matt