所以我在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#比较陌生。
答案 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");
}
那应该运行。