1

私はこのような状況にあり、次のコードで問題が解決することがわかりました。なぜそれが機能するのか知りたいです。

次の状況があるとします。

int i = 2;
object o = (object)i;
decimal d = (decimal)o;

これは無効なキャスト例外で失敗します

以下のコードは機能しますが、

int i = 2;
object o = (object)i;
dynamic dyn = o;
decimal d = (decimal)dyn;

どうもありがとう。

4

1 に答える 1

1

objectと の間に変換演算子が定義されていないため、最初の例のキャストは失敗しdecimalます。ランタイムはオペランドの型のみを処理するため、変換演算子を持つo型であるという基本的な値に違いはありません。

2 番目の例では、 の への変換にdyndecimal、DLR がdynその値を使用して の基になる型を特定する追加のステップが含まれています (推測しています)。値を使用して最終的に使用する型を決定intするため、定義されたint-decimal変換演算子にバインドできます。

于 2012-11-30T09:52:38.763 に答える