2010-12-29 21 views
22

Iは約Int32.TryParse()Int32.TryParse()は失敗した場合に0を返します。成功または失敗ですか?

この方法戻り、 変換が成功した場合、Sに含まれる数と 等価 32ビット符号付き整数値を含む、またはゼロ 変換する場合、MSDNからこれを読ん失敗しました。

しかし、渡された文字列自体が '0'の文字列の場合はどうなりますか?したがって、TryParseはゼロを返します。成功か失敗かをどのように知ることができますか?

答えて

48

いいえ、TryParseは、成功を示すためにを返します。構文解析された値にはoutパラメータの値が使用され、失敗した場合には0が使用されます。だから、:あなたが「0」に渡す場合は、「悪い番号」に渡すと、それは第二のブロックが実行されます一方

int value; 
if (Int32.TryParse(someText, out value)) 
{ 
    // Parse successful. value can be any integer 
} 
else 
{ 
    // Parse failed. value will be 0. 
} 

だから、それは、最初のブロックを実行します。

+0

おやっ!私の悪い。私はプログラミング中にそれを閉じなければならない。そのあまりに簡単にここに投稿する:)。 – NLV

+0

あなたはifの最後に ')'を付けませんでした。 – BoltClock

+0

@BoltClock:固定された、ありがとう。 –

5

このメソッドは、成功または失敗を示すブール値を返します。それを使用してください。整数は、メソッドに渡される参照パラメータであり、メソッドの戻り値とは関係ありません。

documentationInt32.TryParse()というプロトタイプがあります。 を返すことは非常に明白です。 2番目のパラメータはout intです。これは、引数が参照渡しであることを意味し、メソッドによって変更されます。

public static bool TryParse(
    string s, 
    out int result 
) 

だから、これを行う、成功か失敗かをチェックする:

int value; 

if (Int32.TryParse("0", out value)) 
    Console.WriteLine("Parsed as " + value); 
else 
    Console.WriteLine("Could not parse"); 
2

TryParse()はブール値を返します。

 Int32 testInt; 

     if (!Int32.TryParse("123", out testInt)) 
     { 
      MessageBox.Show("Is not a Int32!"); 
      return; // abbrechen 
     } 

     MessageBox.Show("The parst Int32-value is " + testInt); 
2

Int32.TryParse()方法は、リターンとしてboolean値を返し、出力パラメータとして変換された値を提供します。したがって、返品booleanのステータスを確認することができます。

private static void TryToParse(string value) 
    { 
     int number; 
     bool result = Int32.TryParse(value, out number); 
     if (result) 
     { 
     Console.WriteLine("Converted '{0}' to {1}.", value, number);   
     } 
     else 
     { 
     if (value == null) value = ""; 
     Console.WriteLine("Attempted conversion of '{0}' failed.", value); 
     } 
    } 
0

今あなたがTryParseのような内の変数を宣言することができますC#7を使用して...

if (Int32.TryParse(someText, out int value)) 
{ 
    // Parse successful. value can be any integer 
} 
else 
{ 
    // Parse failed. value will be 0. 
} 
関連する問題