1

そこで、C# でカスタムの int.tryparse メソッドを作成して、物事をもう少し簡単に、よりきれいに見えるようにしました。メソッドは次のとおりです。

    public static int? BoolIntParse(string number)
    {
        int temp;
        if (int.TryParse(number, out temp))
            return temp;
        else
            return null;
    }

今、私はこの方法でそれを使用しようと思います:

if(int? someNumber = BoolIntParse(someString))
{
    //do some stuff if its a number
}
else
   //throw some error 

うまくいかないようです。また、次のような条件の前に値を割り当ててみました。

int? someNumber = BoolIntParse(someString);
if(someNumber)
{
    //do some stuff if its a number
}
else
   //throw some error 

そして、エラーメッセージが表示されますCannot implicitely convert type int? to bool

したがって、これは合法的な c# ではありません。これは、nullible int が設計されたもの (このタイプの状況) ですか、それとも正しく実行していないだけですか? 私は比較的C#に慣れていません。

4

3 に答える 3

8

かどうかを確認したいsomeNumber.HasValue。それはあなたの条件にあるはずです。

if (someNumber.HasValue)

または代わりに、@BrokenGlass で言及されています。

if (someNumber != null)

于 2012-06-13T21:18:48.633 に答える
2

TryParse自体が提供する条件付きロジックを使用しないのはなぜですか?

int someNumber;
if (int.TryParse(number, out someNumber))
    //do some stuff if its a number
else
    //throw some error 

編集:また、カスタム例外をスローする必要がない場合は、Parseメソッドに依存して例外をスローすることができます:

int someNumber = int.Parse(number);  //throws error if invalid
//do some stuff if its a number
于 2012-06-13T21:20:43.110 に答える
0

someNumber.equals(BoolIntParse(someString))オブジェクトを扱っているため、使用する必要があります。以下はコードです:

string someString = "2";
int? someNumber = 2;
if(someNumber.Equals(BoolIntParse(someString))) {
    Console.Write("done");
}

それは実行する必要があります。

于 2012-06-13T21:26:49.613 に答える