program study story

プログラムの勉強 アウトプット

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"