UPDATE:下面的代碼纔有意義,在C#4.0(Visual Studio 2010中)協方差/逆變:如何讓下面的代碼編譯
好像我有協的一些誤解/逆變事。任何人都可以告訴我爲什麼下面的代碼不能編譯?
public class TestOne<TBase>
{
public IEnumerable<TBase> Method<TDerived>(IEnumerable<TDerived> values)
where TDerived: TBase
{
return values;
}
}
,而這一個編譯:(!!!)
public interface IBase
{
}
public interface IDerived: IBase
{
}
public class TestTwo
{
public IEnumerable<IBase> Method(IEnumerable<IDerived> values)
{
return values;
}
}
@Adam:我相信你是錯的,IEnumerable的''不'IEnumerable的'默認所以它不會編譯甚至在'3.5' –
sll
2012-02-20 15:39:04
@AdamMihalcin:沒有,那個代碼*不會*在.NET 4之前編譯過。我剛剛嘗試過驗證它。如果沒有泛型不變性,從IEnumerable到IEnumerable 的轉換簡直是無效的。 –
2012-02-20 15:39:42
TSuper的良好通話,只是修復了 – 2012-02-20 15:42:34