3

文字列を他のタイプ、たとえばint32に変換するとき、一方が他方よりも優れているのか、それとも単に好みの問題なのか、疑問に思うことがあります。

Convert.ToInt32("123")

また

Int32.Parse("123")

また

他の方法は?

この質問で有効なintでない場合は、ケースを考慮しません。

4

4 に答える 4

4

Convert.ToInt32は、実際には次の方法で実装されます...

int.Parse(value, CultureInfo.CurrentCulture);

...これは、カルチャ設定を考慮に入れることを除いて、前述の代替案と同じです。int.Parseメソッド自体は次のように実装されます...

Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));

...ここで、Numberは、直接呼び出すことができない内部クラスです。Number.ParseInt32メソッドは、次の属性でマークされています

[MethodImpl(MethodImplOptions.InternalCall)]

...CLR自体の内部に実装されていることを示しています。

于 2012-05-04T06:22:52.783 に答える
2

との主な違いはConver.ToInt32、文字列Int32.Parseの扱い方です。この場合、デフォルト値を返します。nullConvert.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.ParseInt32.TryParseます。

于 2012-05-04T06:27:53.837 に答える
1

文字列からintに変換するときは、常にint.TryParseを使用します。文字列をintに変換できるとは限らないためです。このような:

string temp="222";
int intValue;
if(int.TryParse(temp,out intValue))
{
    //Something
}
于 2012-05-04T06:26:06.490 に答える
0

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
于 2012-05-04T06:24:19.223 に答える