我对这个if语句有一个小问题:
if (selectedlabel.Text!=null|| selectedlabel.Text!=""|| selectedlabel!=null)
{
basketID = int.Parse(selectedlabel.Text); //nullpointer Value Can not be null
}
为什么这不起作用?
我设置了一个断点,我看到selectedlabel.Text
为空:
答案 0 :(得分:6)
您使用||
代替正确的&&
if (selectedlabel != null && selectedlabel.Text != null && selectedlabel.Text != "")
{
basketID = int.Parse(selectedlabel.Text);
}
但这更简洁,也有效:
if (selectedlabel != null && !String.IsNullOrEmpty(selectedlabel.Text))
{
basketID = int.Parse(selectedlabel.Text);
}
使用int.TryParse
确保它是有效的整数:
int basketID;
if(selectedlabel != null && int.TryParse(selectedlabel.Text, out basketID))
{
// ...
}
使用C#6,您还可以使用null-conditional operator:
int basketID;
if(int.TryParse(selectedlabel?.Text, out basketID))
{
// ...
}
答案 1 :(得分:1)
首先,你应该检查空值(因为你试图访问对象的实例字段/属性):
if(selectedlabel != null)
// or
if(!ReferenceEquals(selectedlabel, null))
然后你要做的就是检查string是null还是空(c#上有build-in方法):string.IsNullOrEmpty(selectedlabel.Text)
现在你只需要使用&&
运算符连接这些运算符,它检查两者是否都为真,但如果第一次检查是false
则失败。知道如果不满足第一个条件就会退回,你可以把它合并到:
if (!ReferenceEquals(selectedlabel, null) && !string.IsNullOrEmpty(selectedlabel.Text))
{
// your code here
}
但另一个问题是basketID = int.Parse(selectedlabel.Text);
。正如我经常说的那样留下一些错误余量这意味着不要假设用户是聪明的(更好的方式!总是假设用户是愚蠢的)所以不要输入数字,用户将输入类似的东西“请在这里输入第123号”,它将会终止您的申请。
要改掉这个TryParse
而不是:
int.TryParse(selectedlabel.Text, out basketID);
好的,结合上面的 ALL ,结果应该是这样的:
if (!ReferenceEquals(selectedlabel, null) && !string.IsNullOrEmpty(selectedlabel.Text))
{
if(!int.TryParse(selectedlabel.Text, out basketID))
{
// user entered text that is unconvertible to int
}
}
答案 2 :(得分:0)
更改为
if (!string.IsNullOrEmpty(selectedlabel?.Text))
{
basketID = int.Parse(selectedlabel.Text);
}
答案 3 :(得分:0)
如果你想让它检查null,你的if语句应该等于null,那么它应该是这个
if (selectedlabel.Text==null|| selectedlabel.Text!=""|| selectedlabel!=null)
{
basketID = int.Parse(selectedlabel.Text); //nullpointer Value Can not be null
}
否则它不会显示您要避免的错误。 希望它有所帮助