【问题标题】:Convert int? to bool in conditional转换整数?有条件地布尔
【发布时间】:2012-06-16 21:58:26
【问题描述】:

所以我在 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#。这是为 nullable int 设计的(这种情况)还是我没有正确地做到这一点?我对 c# 比较陌生。

【问题讨论】:

    标签: c# integer nullable conditional-statements


    【解决方案1】:

    你想检查someNumber.HasValue。那应该在你的条件中。

    if (someNumber.HasValue)

    或者作为替代方案,@BrokenGlass 提到:

    if (someNumber != null)

    【讨论】:

    • 谢谢。您的回答有效,但看起来我的方法确实无法节省我的时间
    • @StephenGranet 不要过度思考问题。直接使用 TryParse :)
    • @jglouie 哈哈,当我是新手时,这很难;)
    • @StephenGranet 您正在尝试简化这是一件好事。使用 C# 的时间越长,模式就会跳出来
    【解决方案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
    

    【讨论】:

    • 是的,以这种方式编写的“helper”函数实际上并没有多大帮助。
    • 我讨厌每次想查看是否可以解析某些内容时都必须创建局部变量。但是既然看起来我无论如何都必须这样做......我不妨使用提供的方法吧
    • 您不是已经在原始代码中创建了一个int? 局部变量吗?
    • 我正在创建一个 int 变量来保存 Int.TryParse 的输出,因为我上面的方法实际上并没有清理我的代码或节省时间/跨度>
    • 当我真正想要保留空值时(例如,将其持久化到数据库中的可为空列),我会使用您的方法。如果您只是将其用于验证,那么您实际上并不需要它。
    【解决方案3】:

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

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

    应该会运行。

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 2020-04-08
      • 2016-04-14
      • 2013-02-09
      相关资源
      最近更新 更多