как включить обнуляемую переменную - PullRequest
1 голос
/ 16 декабря 2010

У меня есть следующий код

 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") может возвращать ноль, Как я могу объявить переключатель (x) обнуляемым

Ответы [ 4 ]

5 голосов
/ 16 декабря 2010
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;
    }
}
2 голосов
/ 16 декабря 2010

Строки, будучи объектами, всегда обнуляются.Просто включите null как возможность в свой оператор switch:

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;

}
0 голосов
/ 16 декабря 2010
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, когда xn.InnerText возвращает ноль.

v = string.IsNullOrEmpty(xn.InnerText) ? 0 : xn.InnerText;
0 голосов
/ 16 декабря 2010

Я бы пошел с этим (расширен для удобства чтения)

var node = xn.SelectSingleNode("@type");
var innerText = (node == null ? (string)null : node.InnerText);
switch (innertext)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...