如何打开一个可以为null的变量

时间:2010-12-16 16:18:39

标签: .net c#-4.0

我有以下代码

 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)可以为空?

4 个答案:

答案 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;