2014-07-17 65 views
1

我想检查一个文本框,如果null然后分配零,然后继续进行一些计算。我知道有一个空合并(?)运算符可以帮助我,但我不确定是否可以在textbox为空时分配int。空字符串为空的合并

我试图写这样的东西,但似乎是一个错误。

sdowntime = Convert.ToInt32(txtSDown.Text) ?? 0; 

我得到这个

错误98操作 '?'不能应用于'int'和'int'类型的操作数

任何我做错了或实际上我应该使用另一种方法?请指导。 非常感谢!

+1

'Convert.ToInt32'不可能返回null。 –

回答

1

您也可以使用TryParse方法,像这样:

int sdowntime; 
int.TryParse(txtSDown.Text, out sdowntime); 

如果TextBox为空或包含一个非数字值,则out参数将被分配值0。否则,适当解析值被分配。但请注意,您应始终进行客户端验证,以确保用户在数字字段中不输入非数字值。

0

由于int是一个值类型,所以出现错误。由于值类型不是null -able,因此对它们使用空合并运算符是没有意义的。

你真正需要做的是检查 null -ness文:

string textToParse = txtDown.Text ?? "0"; 

编辑:所以我犯了一个错误,它已经指出,TextBox.Text永远不能是null

额外:如果你的文字是不是null

即使你检查空,Convert.ToInt32可以失败,但空(""String.Empty)。您可以使用int.TryParse

int sdowntime; 

if (!int.TryParse(txtDown.Text ?? "0", out sdowntime)) 
{ 
    // int.TryParse will assign 0 to sdowntime if it fails 
    // so watch out for that too. 
} 
+0

“文本框”的“文本”不能为空。如果'TextBox'为空,则它将是'String.Empty'。 – jmcilhinney

+0

@jmcilhinney:谢谢。我学到了东西。 – Krumia