2010-12-16 9 views
1

I持って、次のコードはどのように切り替えるにはNULL可能変数

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

      } 

xn.SelectSingleNode( "@タイプは") はどのように私は(x)がNULL可能であることをスイッチ宣言することができ、nullを返すことがあり

(読みやすくするために拡張)
+0

返される 'null'値は、' switch'命令内の 'default'動作によって処理されます。あなたが望むものではありませんか? –

+1

@Will、 'null'は' SelectSingleNode'の結果です。この場合、 'InnerText'を呼び出すことはNREになります。 –

+0

@Anthony:同意しました。私はその角度の下でOPの質問に目を向けていなかった。 –

答えて

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ヌル参照の確認は、私の謙虚な視点では常に良い習慣です。 =) –

0

私はこれで行くと思い

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

オブジェクトである文字列は常にNULL可能です。ちょうどあなたの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; 

} 
+0

+1プログラマにとってシンプルさと可読性の両方を保ちながら、軽くて素早く手に入れました。 'null'を扱うよりも簡単なのは何?私はそれが好きです! –

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

のほかに、それはintあるようvが見えますので、あなたはときxn.InnerText戻っ0にそれを割り当てることを検討したいかもしれませんヌル。

v = string.IsNullOrEmpty(xn.InnerText) ? 0 : xn.InnerText; 
関連する問題