2012-08-10 60 views
2

我有一個代碼:的NullReferenceException在長度

string[] sizes = new string[] {"1","11","2","22","200","222", null, "105", "101", "102", "103", "90" }; 

try 
{ 
    var size = from x in sizes 
      orderby x.Length, x 
      select x; 

    foreach (var p in size) 
    { 
    Console.WriteLine(p); 
    } 
    Console.Read(); 
} 
catch (NullReferenceException) 
{ 
} 

我如何能趕上空在x.Length,並繼續執行代碼?

+4

怎麼樣「其中x不爲空」條款或類似的東西? – Qnan 2012-08-10 10:27:42

+1

其中x!= null – h1ghfive 2012-08-10 10:28:57

+1

您將無法捕捉到異常並繼續從您所在的位置(您不應該)。堆棧展開將發生,您將不會在try和catch之間有範圍變量。像別人說的那樣去做,並通過檢查null來避免它。 – 2012-08-10 10:32:10

回答

11

如何在x.Lenght中捕獲null並繼續執行代碼?

那麼,你想在這種情況下的價值是什麼?例如,你可以使用:

orderby x == null ? -1 : x.Length, x 

或者可能:

orderby x == null ? int.MaxValue : x.Length, x 

或者可能:

orderby x == (x ?? "").Length, x 

或者,也許你應該過濾字符串開始:

var size = from x in sizes 
      where x != null 
      orderby x.Length, x 
      select x; 
1

您應該嘗試添加

where x != null 

在過濾