检查数字是否为32位无符号无警告?

时间:2019-05-23 20:56:26

标签: c# validation input

这是一个难题,我收到的是字符串形式的数字。我需要检查此输入,以确保它是有效的无符号32位数字(负数应被拒绝)。问题是它是针对“ 0警告”项目的,因此不起作用:

    try
    {
        uint input = Convert.ToUInt32(textBoxSN.Text.ToString());
    }
    catch(Exception ex)
    {
        //error handling
    }

因为我得到警告“变量'ex'已声明但从未使用过”。而且我没有使用变量的有用方法。如果使用'ex'编写一行无效的行,则将收到有关该消息的警告。

此外,我的程序的结构方式,我不想在此函数中对变量“ input”执行任何操作,只需进行验证即可。因此,我也得到警告,声明已声明“ input”但从未使用过。有任何想法吗?并不是非常重要,只是C#中一个有趣的问题。

2 个答案:

答案 0 :(得分:4)

除非我在这里缺少任何内容,否则只需使用UInt32.TryParse

UInt32 ui;

if (UInt32.TryParse("100", out ui))
    Console.WriteLine("100: Valid");
else
    Console.WriteLine("100: Not Valid");

if (UInt32.TryParse("-100", out ui))
    Console.WriteLine("-100: Valid");
else
    Console.WriteLine("-100: Not Valid");

输出:

100: Valid
-100: Not Valid

未显示任何编译器警告。

在您的情况下,您将像这样使用它:

UInt32 input;

if (UInt32.TryParse(textBoxSN.Text, out input))
{
    // Is valid
}
else
{
    // Is not valid
}

编辑

以下来自OP的评论:实际上并不想消耗TryParse语句的输出:

if (UInt32.TryParse("100", out _))
    ...

如果您不使用变量来存储输出,这将丢弃输出参数的结果并删除所有编译器警告。

在您的情况下,如果您只想处理无效值,则可以执行以下操作:

if (!UInt32.TryParse(textBoxSN.Text, out _))
{
    // Is not valid
}

答案 1 :(得分:0)

您还可以编写一个简单的方法,该方法采用string并返回一个bool来反映输入是否为有效的uint。请注意,我们在这里使用uint.TryParse,如果成功将字符串参数解析为bool,则返回uint表示成功,并将out参数设置为成功:

public static bool IsUint32(string input)
{
    uint result;
    return uint.TryParse(input, out result);
}

然后您可以在代码中使用它:

if (IsUint32(textBoxSN.Text))
{
    // Valid input was entered
}

通常,最好避免使用异常处理(try/catch)进行验证,因为它更昂贵并且会导致代码混乱。