VB.NET
1 Dim abc As Decimal = 1111.1111111111111 2 Dim def As Double = CType(abc, Double)
decimal 型から double 型へキャストした時に
CType にマウスポイントすると "キャストが冗長です。"とメッセージがでますが、
何故でしょうか。
この質問させて頂いた理由といたしまして、C# のコードを VB.NET に手動で変換しているのですが(勉強も兼ねて)その際にC#での以下のコードを VB.NET に変換したところ今回の疑問に直面しました。
C#
1decimal abc = 1111.1111111111111M; 2double def = (double)abc;
「C# ではキャストが必要で VB.NET でいらない」というのは言語の違いということで間違いないのでしょうか。
初歩的な質問となりますが宜しくお願い致します。
そんな警告は出ませんが、abc は Decimal ではなく Double なのではありませんか?
間違いです。ビルドしてもエラー一覧には出ませんが、マウスでポイントすると表示されました。
ご返信頂き、誠にありがとうございます。
上記コードは正しいです。質問方法に問題がありました。
>"キャストが冗長です。"と警告がでますが、何故でしょうか。
この上記は警告ではなく Ctype にカーソルをもっていくと "キャストが冗長です。" と
メッセージ(エラー?正式名がわかりません。)がでます。これは decimal から double 型
へのキャストなので無駄ではないと思っています。理解が間違っているのでしょうか。
すみません、誤解を招きました。間違いと書いたのは、私の書いたことが間違いということです。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/data-types/widening-and-narrowing-conversions
ここを見ると、Decimal から Double への変換は拡大変換になるので、CType は不要です。そのため、ポイントするとリファクタリングのためのヒントが表示されます。
このような時には、その部分にキャレットを置いて Ctrl+. (コントロールキーとドットを同時に押す)で修正できます。
ただ、こちらで試してみたところ、Double から Decimal への変換は縮小変換にあたるにも関わらず、Double から Decimal への変換でも明示的なキャストが不要ということになってしまいます。私の理解が間違っているのかもしれませんが、もしかするとバグかドキュメントが間違っている可能性もあります。
丁寧なご返信ありがとうございます。
バグかドキュメントが間違っている可能性があるとの旨、わかりました。
また本件を質問させて頂いた理由といたしまして、C# のコードを VB.NET に手動で変換しているのですが(勉強も兼ねて)その際にC#での以下のコードをVB.NET に変換したところ今回の疑問に直面しました。
```C#
decimal abc = 1111.1111111111111M;
double def = (double)abc;
```
C#ではキャストが必要でVB.NETでいらない。というのは言語の違いということで間違いないのでしょうか。質問が派生してしまい申し訳ないです。。。
それは言語の違いですね。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/numeric-conversions
> decimal 型と float 型または double 型の間に暗黙的な変換はありません。
暗黙的な変換がない=明示的にキャストする必要があるということです。
ご返信頂き、ありがとうございます。
質問内容について、お陰様で解消いたしました。
今後とも宜しくお願い致します。
また、Zuishin さんにベストアンサーを送りたいのですが、今回の質問に対して回答を頂けないでしょうか。質問に対しての返信のようでベストアンサーを選択できません。お手数ですが宜しくお願い致します。
いえ、VB.NET でなぜ双方向の暗黙的キャストができるのかというところが未解決なので、識者の回答を待つ方がいいと思います。
まだ質問したばかりなので、十分人の目に触れていません。
ご返信内容について承知いたしました。
丁寧な回答誠にありがとうございました。
回答2件
あなたの回答
tips
プレビュー