コードスニペットをVB.NETからC#に変換したところ、この問題に遭遇しました。
このコードを考えてみましょう:
Dim x As Integer = 5
Dim y As Object = x
Dim z As Decimal = CType(y, Decimal)
コンパイラまたは実行時にエラーは発生しません。zは5です。
それでは、このコードをC#に変換しましょう
int x = 5;
object y = x;
decimal z = (decimal)y;
コンパイラからのエラーはありませんが、実行時に例外がスローされます。
Cannot unbox "y" to "decimal"
今私の質問は、これを行うための最も賢いC#の方法です。
現在、私のコードは次のようになっています。
int x = 5;
object y = x;
decimal z = decimal.Parse(y.ToString());
しかし、別の解決策は次のようになります。
decimal z = (decimal)(int)y;
これは少し紛らわしいように見えますが、おそらくdecimal.Parseよりもオーバーヘッドが少ないと思います。