このエントリーをはてなブックマークに追加このエントリをつぶやく

初心者がVisual C# .NETではまったワナ ~その2~

型がない言語JavaScriptを複数年にわたってやってきたこともあり、
C#を始めた際に、型変換で躓きました。

JavaScriptの変数はvar宣言で型変換がない・・・入れる値によっては型が自動的に変化してしまうのです。

例1:
var num1 = 1;
var num2 = 2.2;
var str = “abc”;
str = num1 + num2;

上記の場合、strの内容を表示すると「3.2」と表示されます。
他の言語にはない不思議なところが数値型の計算が文字列型の変数に格納できてしまうところ。
要するに初期化していても、入れる値によっては型が変わってしまうこともある。それがJavaScriptなのです。

C#でいう暗黙的変換みたいなものですが、C#では数値型と文字列型の変換は明示的に示してあげなければなりません。
C#で上記のようなコードを実行すると「型’double’を’string’に変換できません。」とエラーになります。
ではどのようにしたら、動くようになるのか。

例2:
int num1 = 1;
double num2 = 2.2;
string str = “abc”;
str = (num1 + num2).ToString();

答えは簡単です。明示的にStringに変換しますよーとおまじない(ToString())をしてあげればいいのです。

あたりまえなことかもしれませんが、こんな初歩的なところで多々躓きました。
どっちかっていうとC#よりJavaScript側の話になってしまいましたね・・・。

先ほど少し述べましたが、C#の型変換には「明示的変換」と「暗黙的変換」の2種類があります。
明示的変換:変換先の型を明示的に指定し行う変換。キャスト変換ともいわれます。
暗黙的変換:ある方の変数を別の変通に代入するだけで自動的に型を変換する機能。
言葉で書かれてもわからないといった方のために、明示的変換と暗黙的変換の例をそれぞれあげてみます。

例3:明示的変換の例
double dbl = 1.2345;
int i = (int)dbl; //小数点以下が切り捨てられ1となる

例4:暗黙的変換の例
float ft = 1;
double dbl = ft;

では暗黙的変換ができるか否かをどうやって判断したらいいのか。
答えは変換前の変数の型の範囲が、変換後の変数の型の範囲よりも小さいか否かです。
ただし、intなどの整数型からdoubleやfloat等に変換する場合、精度が失われる場合があります。

下記サイトに型変換についてわかりやすく書いてありますので、ご参照ください。
ある型の値を別の型に変換する

各々の型についての範囲は以下をご参考ください
整数型の一覧表(C#)
浮動小数点型の一覧表(C#)
decimal(C#)
上記参考サイトからわかるように、intの範囲<doubleの範囲のため、
doubleからintに変換するとき(例3)は暗黙的に変換することができず、キャスト変換(明示的変換)が必要となってくるのです。

暗黙的変換できる型等は下記サイトをご参照ください。
組み込み型変換(C#によるプログラミング入門)

カテゴリー: プログラミング   タグ: , , , ,   この投稿のパーマリンク

コメントは受け付けていません。