2010-12-16 34 views
1

我有以下代碼如何切換可爲空的變量

switch (xn.SelectSingleNode("@type").InnerText) 
      { 
       case "int": 
       case "int16": 
       case "int32":v=int.Parse(xn.InnerText);break; 
       default:v=xn.InnerText; break; 

      } 

的xn.SelectSingleNode(「@型」)可能返回null, 我怎樣才能申報開關(X)爲可以爲空

+0

返回的'null'值應該由''switch'指令中'default'行爲處理。這不是你想要的嗎? – 2010-12-16 16:22:27

+1

@Will,'null'將是'SelectSingleNode'的結果,在這種情況下,調用'InnerText'將是一個NRE。 – 2010-12-16 16:23:20

+0

@Anthony:同意。我沒有在這個角度看待OP的問題。 – 2010-12-16 16:25:41

回答

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; 
    } 
} 
+0

+1以我卑微的觀點來說,驗證空引用總是一個好習慣。 =) – 2010-12-16 16:34:14

0

我會去這個(擴展了可讀性)

var node = xn.SelectSingleNode("@type"); 
var innerText = (node == null ? (string)null : node.InnerText); 
switch (innertext) 
... 
2

作爲對象的字符串總是可以空的。只包含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

+1你明白了,精益和迅速,保持程序員的簡單性和可讀性。處理'null'最簡單!!?我喜歡! – 2010-12-16 16:33:01

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,所以你不妨考慮將其分配給0xn.InnerText返回時空值。

v = string.IsNullOrEmpty(xn.InnerText) ? 0 : xn.InnerText;