转换int?有条件的bo ..

时间:2012-06-13 21:17:16

标签: c# integer nullable conditional-statements

所以我在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 

这似乎不起作用。我也尝试在condtional之前分配值,例如:

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#比较陌生。

3 个答案:

答案 0 :(得分:8)

您想检查someNumber.HasValue。这应该是你的条件。

if (someNumber.HasValue)

或作为替代方案,由@BrokenGlass提及:

if (someNumber != null)

答案 1 :(得分: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

答案 2 :(得分:0)

由于您正在处理对象,因此需要使用someNumber.equals(BoolIntParse(someString))。以下是代码:

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

那应该运行。