contravariantデリゲートをキャストしようとしていますが、何らかの理由で "as"演算子を使ってのみ行うことができます。私はcontravariantデリゲートを "as"でキャストすることができます
interface MyInterface { }
delegate void MyFuncType<in InType>(InType input);
class MyClass<T> where T : MyInterface
{
public void callDelegate(MyFuncType<MyInterface> func)
{
MyFuncType<T> castFunc1 = (MyFuncType <T>) func; //Error
MyFuncType<T> castFunc2 = func as MyFuncType<T>;
MyFuncType<T> castFunc3 = func is MyFuncType<T> ? (MyFuncType<T>)func : (MyFuncType<T>)null; //Error
}
}
castFunc2正常に動作しますが、castFunc1とエラーが発生しcastFunc3:
Cannot convert type 'delegateCovariance.MyFuncType<myNamespace.MyInterface>' to myNamespace.MyFuncType<T>'
castFunc2とcastFunc3ので、私はそれらのいずれかが原因となる可能性がどのようにだけ理解していない「同等」ですMSDN article on the as operator状態エラー。これを混乱させるもう一つの問題は、MyInterfaceをインタフェースからクラスに変更するとエラーを取り除くことです。
ここで何が起こっているのか理解してくれる人はいらっしゃいますか? ありがとう!
これは私のためにここでうまくコンパイルされます:http://ideone.com/5SjUxV私は何か不足していますか? (最も理想的なものではない)。私は、 'MyFuncType'宣言から' in'を取り除くと、エラーが発生します。 –
hmm。イデオンはモノを使用していますが、私はビジュアルスタジオからモノを使ってみましたが、まだエラーが出ています。 – rob
@rob私はモノ・ターゲティング.Net 4を使用し、エラーは発生しませんでした。どのバージョンの.Netフレームワークをターゲットにしていますか? –