这是一个难题,我收到的是字符串形式的数字。我需要检查此输入,以确保它是有效的无符号32位数字(负数应被拒绝)。问题是它是针对“ 0警告”项目的,因此不起作用:
try
{
uint input = Convert.ToUInt32(textBoxSN.Text.ToString());
}
catch(Exception ex)
{
//error handling
}
因为我得到警告“变量'ex'已声明但从未使用过”。而且我没有使用变量的有用方法。如果使用'ex'编写一行无效的行,则将收到有关该消息的警告。
此外,我的程序的结构方式,我不想在此函数中对变量“ input”执行任何操作,只需进行验证即可。因此,我也得到警告,声明已声明“ input”但从未使用过。有任何想法吗?并不是非常重要,只是C#中一个有趣的问题。
答案 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
)进行验证,因为它更昂贵并且会导致代码混乱。