内部クライアントがVB.Netで構成するC#ライブラリがあります
InvalidCastException
彼らのスクリプトは、彼らが本当にすべきではない場所を投げています。
したがって、コードは次のようになります(大幅に簡略化されています)。
//C#3
public class Foo {
public static implicit operator Foo ( Bar input )
{
return new Foo( input.Property1, input.Property2 );
}
}
次に、VB.Netで(これも大幅に簡略化されています):
Dim fc = New FooCollection()
Dim b as Bar = GetBar()
fc(fooIndex) = b 'throws InvalidCastException at runtime!
暗黙的/拡大演算子内にブレークポイントを追加すると、到達しません。
暗黙の演算子を削除すると、コンパイルされません。
C#で同等のステートメントを実行すると:
var fc = new FooCollection();
Bar b = GetBar();
fc[fooIndex] = b //it works!
奇妙な-VB.netコンパイラはキャスト演算子を見つけることができるように見えますが、実行時に失われます。確かに、VBとC#ILはここでかなり似ていますか?
VB.netコードは動的にコンパイルされます。コンパイルは、ユーザーがアプリに初めてログインしたときに行われます。.Net 3.5に対してVB.Netとしてコンパイルされており、COM相互運用機能を使用していません。
何か案は?