UPDATEコンパイルする方法:次のコードは、唯一のC#4.0(Visual Studioの2010)で理にかなってを共分散/ contravariance:次のコードは、
私は、共分散/ contravariance物のいくつかの誤解が生じていますように思えます。誰も私に次のコードがコンパイルされない理由を教えてもらえますか?
public class TestOne<TBase>
{
public IEnumerable<TBase> Method<TDerived>(IEnumerable<TDerived> values)
where TDerived: TBase
{
return values;
}
}
この1つはコンパイルしながら:(!!!)
public interface IBase
{
}
public interface IDerived: IBase
{
}
public class TestTwo
{
public IEnumerable<IBase> Method(IEnumerable<IDerived> values)
{
return values;
}
}
@Adam:私はあなたが間違っていると信じて、 'それもで' 3.5' – sll
@AdamMihalcinをコンパイルしないように、デフォルトでは '' IEnumerableをのIEnumerableない ':いいえ、そのコード*はいないだろう* .NET 4より前にコンパイルしました。私はそれを検証するために自分で試しました。一般的な不変性がなければ、「IEnumerable 」から「IEnumerable 」への変換は単に無効です。 –
TSuperで電話して、ちょうどそれを修正しました –