基本的なキャストには以下のようなものがある。
Convert.ToInt32(object);
int.Parse(string);
object.ToString();
どれも型変換に使うメソッドだが、それぞれ特徴がある。例えば、ParseやToStringはNullを渡すとエラーになる。
しかし、Convertは0や空白が返ってくる。
そんな特徴を理解しながら使わないと……
今までは以下のようなメソッドを作って型変換時のエラーを回避していた。
private string ConvertToString(object obj)
{
if (obj == null)
{
return stirng.Empty;
}
else
{
return obj.ToString();
}
}
これがConvertを使うを以下のようになる。
Convert.String(object);
とはいってもConvertも万能でなく、String.Emptyを渡して数値型に変換しようとするとエラーになる。
いろんな型変換
Convert、Parse、ToStringの特徴は以下の通り。
string value0 = null;
string value1 = string.Empty;
string value2 = "abc";
string value3 = "123";
//----------------------------------
//【Convert】
// 引数がObject型でも変換できる
//----------------------------------
// 0
Console.WriteLine(Convert.ToInt32(value0));
// FormatException: 入力文字列の形式が正しくありません。
//Console.WriteLine(Convert.ToInt32(value1));
// FormatException: 入力文字列の形式が正しくありません。
//Console.WriteLine(Convert.ToInt32(value2));
// 123
Console.WriteLine(Convert.ToInt32(value3));
#endregion
//----------------------------------
//【Parse】
// 引数がString型のみ変換できる
//----------------------------------
// ArgumentNullException: 値を Null にすることはできません。
//Console.WriteLine(int.Parse(value0));
// FormatException: 入力文字列の形式が正しくありません。
//Console.WriteLine(int.Parse(value1));
// FormatException: 入力文字列の形式が正しくありません。
//Console.WriteLine(int.Parse(value2));
// 123
Console.WriteLine(int.Parse(value3));
//----------------------------------
//【ToString】
// 引数がObject型でも変換できる
//----------------------------------
// NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
//Console.WriteLine(value0.ToString());
// Empty(未入力)
Console.WriteLine(value1.ToString());
// abc
Console.WriteLine(value2.ToString());
// 123
Console.WriteLine(value3.ToString());
例外知らずの型変換
先の型変換ではそれぞれ与える引数により例外は発生していた。
その例外を一切発生させないためには、以下の様な実装方法が良いかも。
他に良いアイデアがありましたら、教えてください。
static void Main(string[] args)
{
string value0 = null;
string value1 = string.Empty;
string value2 = "abc";
string value3 = "123";
//----------------------------------
// ConvertToString
//----------------------------------
Console.WriteLine(ConvertToString(value0));
Console.WriteLine(ConvertToString(value1));
Console.WriteLine(ConvertToString(value2));
Console.WriteLine(ConvertToString(value3));
//----------------------------------
// ConvertToInt
//----------------------------------
Console.WriteLine(ConvertToInt(value0));
Console.WriteLine(ConvertToInt(value1));
Console.WriteLine(ConvertToInt(value2));
Console.WriteLine(ConvertToInt(value3));
}
static string ConvertToString(object value)
{
if (value == null)
{
return string.Empty;
}
else
{
return value.ToString();
}
}
static int ConvertToInt(object value)
{
int result;
if (int.TryParse(ConvertToString(value), out result))
{
return Convert.ToInt32(value);
}
else
{
return 0;
}
}
以上
0 件のコメント :
コメントを投稿