我有以下代码
switch (xn.SelectSingleNode("@type").InnerText)
{
case "int":
case "int16":
case "int32":v=int.Parse(xn.InnerText);break;
default:v=xn.InnerText; break;
}
xn.SelectSingleNode(“@ type”)可能返回null, 如何声明switch(x)可以为空?
答案 0 :(得分:5)
var type = xn.SelectSingleNode("@type");
if (type == null)
{
// Handle the case
}
else
{
switch (type.InnerText)
{
case "int":
case "int16":
case "int32":v=int.Parse(xn.InnerText);break;
default:v=xn.InnerText; break;
}
}
答案 1 :(得分:2)
作为对象的字符串总是可以为空的。只需在switch语句中包含null:
switch (xn.SelectSingleNode("@type").InnerText)
{
case "int":
case "int16":
case "int32":v=int.Parse(xn.InnerText);break;
case null:
// Handle case
break;
default:v=xn.InnerText; break;
}
答案 2 :(得分:0)
我会选择这个(为了便于阅读而扩展)
var node = xn.SelectSingleNode("@type"); var innerText = (node == null ? (string)null : node.InnerText); switch (innertext) ...
答案 3 :(得分:0)
switch (xn.SelectSingleNode("@type").InnerText) {
case "int":
case "int16":
case "int32":
v = int.Parse(xn.InnerText);
break;
default:
v = string.IsNullOrEmpty(xn.InnerText) ? null : xn.InnerText; // Here you shall avoid the `NullReferenceException`.
break;
}
此外,如果我理解正确,v
看起来像是int
,那么当0
返回null时,您可能希望考虑将其分配给xn.InnerText
。
v = string.IsNullOrEmpty(xn.InnerText) ? 0 : xn.InnerText;