2014-10-27 71 views
-4

我不能換我的頭周圍爲什麼這個代碼產生了大量的空行:循環會生成很多行?

int nr = 0; 
foreach (var item in lists.Select(x => x.match_id)) 
{ 
    foreach (var match in lists) 
    { 
     Console.Write(match.nickname 
      .Where(x => lists[nr].match_id == match.match_id) 
      .Select(z => match.nickname) 
      .FirstOrDefault()); 
    } 

    nr++; 
} 

lists是對象的數組。輸出:http://extradelar.se/printscrn.jpg

下面所有的null都是下一個記錄,然後是更多的null等等。爲什麼?

+0

是否已確認所有記錄有'nickname'? – MyCodeSucks 2014-10-27 15:13:12

+0

因爲您不過濾您的暱稱,而是根據匹配ID選擇元素 – samy 2014-10-27 15:13:52

+0

是的,每個對象數組中有10個暱稱 – user3581054 2014-10-27 15:13:55

回答

0

不輸出的null,您無需調用Console.Write如果值爲null

嘗試是這樣的:

int nr = 0; 
foreach (var item in lists.Select(x => x.match_id)) 
{ 
    foreach (var match in lists) 
    { 
     var n = match.nickname 
      .Where(x => lists[nr].match_id == match.match_id) 
      .Select(z => match.nickname) 
      .FirstOrDefault(); 

     if (n != null) 
     { 
      Console.Write(n); 
     } 
    } 

    nr++; 
} 
+0

雖然這解決了他的問題......這是非常糟糕的編程。他說他有一系列的物體。我們知道這些對象有一個Id和一個暱稱。現在你首先遍歷整個列表來獲取var item(這是我猜測的一個整數)。我們實際上沒有做任何事情?然後我們再次通過與之前相同的列表循環。在那個循環中我們有匹配,這是一個對象作爲OP狀態。然後,我們要輸出該列表中match_Id等於match.match_id的對象的暱稱。 我想它只是一個賭博,因爲我們不知道他想完成什麼...... – Tristan 2014-10-27 15:35:12

+0

爲什麼不添加一個where子句在LINQ查詢中不是null的暱稱,類似於'x =>!string.IsNullOrEmpty(x .nickname)'< - 我知道這是關閉語法 – alykins 2014-10-27 15:36:26

0

您正在通過相同的數組循環兩次。我想你想做的事:

for(int i = 0; i < lists.length; i++){ 
    Console.Write(item.nickname 
     .Where(x=> lists[i].match_id === item.match_id) 
     .Select(z=> item.nickname) 
     .FirstOrDefault()); 
} 

咋一看之後我的2美分..