文字列を他のタイプ、たとえばint32に変換するとき、一方が他方よりも優れているのか、それとも単に好みの問題なのか、疑問に思うことがあります。
Convert.ToInt32("123")
また
Int32.Parse("123")
また
他の方法は?
この質問で有効なintでない場合は、ケースを考慮しません。
文字列を他のタイプ、たとえばint32に変換するとき、一方が他方よりも優れているのか、それとも単に好みの問題なのか、疑問に思うことがあります。
Convert.ToInt32("123")
また
Int32.Parse("123")
また
他の方法は?
この質問で有効なintでない場合は、ケースを考慮しません。
Convert.ToInt32は、実際には次の方法で実装されます...
int.Parse(value, CultureInfo.CurrentCulture);
...これは、カルチャ設定を考慮に入れることを除いて、前述の代替案と同じです。int.Parseメソッド自体は次のように実装されます...
Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));
...ここで、Numberは、直接呼び出すことができない内部クラスです。Number.ParseInt32メソッドは、次の属性でマークされています。
[MethodImpl(MethodImplOptions.InternalCall)]
...CLR自体の内部に実装されていることを示しています。
との主な違いはConver.ToInt32
、文字列Int32.Parse
の扱い方です。この場合、デフォルト値を返します。null
Convert.ToInt32
public static int ToInt32(string value)
{
if (value == null)
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
}
私はそれが好きではありません。"0"
解析する必要があるのは。だけだと思います0
。この動作は当初、VisualBasicプログラマー向けに設計されました。
これは、既存のVisualBasic6変換方法の動作を反映したVisualBasic6からVisualBasic.NETに移行するプログラマー向けの一連の変換方法です。Visual Basicは従来、型変換に変換メソッドを使用していたのに対し、C#プログラマーはキャスト演算子に慣れていると想定されていました。
したがって、非VBプログラマーとして、私はとを使用Int32.Parse
しInt32.TryParse
ます。
文字列からintに変換するときは、常にint.TryParseを使用します。文字列をintに変換できるとは限らないためです。このような:
string temp="222";
int intValue;
if(int.TryParse(temp,out intValue))
{
//Something
}
V4Vendettaが提案したように、変換に関連する例外を回避するには、TryParseを使用することをお勧めします。
int result = 0;
a = "3";
string b = "b";
string c = "2147483648"; //int32 max value + 1
int.TryParse(a, out result); // returns true result=3
int.TryParse(b, out result); // returns false result=0
int.TryParse(c, out result); // returns false result=0