C# いろいろな型変換(キャストについて理解する)
基本的なキャストには、
Convert.Tostring(object);
int.Parse(string);
object.ToString();
それぞれの特徴
・ParseとToStringはNullを渡すとエラーになる。
・ConvertにNullを渡すと0や空白を返す。
時と場合によって、使い分ける必要があるということ。
string value0 = null;
string value1 = string.Empty;
string value2 = "abc";
string value3 = "123";
Convertの特徴
引数がObject型でも変換できる
Console.Write(Convert.ToInt32(value0));
Convertも万能ではなく、String.Emptyを渡して数値型に変換しようとするとエラーになる。
Parseの特徴
引数がString型のみ変換できる
Console.Write(int.Parse(value3));
Tostringの特徴
引数がObject型でも変換できる
Console.write(value1.Tostring());
C#で確実に変換できるかわからないときは、
TryParseとout varを使う
文字列や日付にキャストする際、確実に変換できる値かどうかわからない場合
int.ParseやDatetime.Parseをtry{...} catch{...}とすると重い。
TtyParseが有効
var line = Console.ReadLine();
int nam;
if(int.TryParse(line,out nam))
Console.Write($"{line}の2倍は{nam*2}です");
else
Console.Write($"{line}は整数に変換できません")
TryParseメソッドの直前で変数をおこなっていますが変数はインライン化ができる。
int nam;
if(int.TryParse(line,out nam))
Console.Write($"{line}の2倍は{nam*2}です");
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
if(int.TryParse(nam,line,out nam))
Console.Write($"{line}の2倍は{nam*2}です");
desimal ,flout,doubleといった数字値はTryParseメソッドを持っているので同様にキャスト可能。
日付には、TryParseExact
日付には,TryParseでは書式設定がない。
”2018/06/10”であれば文字列は変更できるが、
"2018年6月10日"といった文字列はキャストができない。
var line = Console.ReadLine();
if(Detetime.TryParseExact*1
Console.Write($"変換" Year:{datetime.Year} Month:{datetime.Month} Day; {datetime.Day})
else
Console.Write("変換できない")
*1:line,"yyyy年MM月dd日,
CultureInfo.InvariantCulture, DateTimeStyle.None,out var dateTime"