2013-06-12 93 views
-2

下面的代碼是按預期工作,但我想知道是否有一種方法來改善我的代碼使用Linq?轉換一個for循環到Linq

我正在做的是查找行[5]和行[6]是否有價值。

for (int i = 0; i < nameList.Count; i++) 
{ 
    IList<IWebElement> rows = driver.FindElements(By.CssSelector("itd_1")); 
    for (int k = 0; k < rows.Count; k++) 
    { 
     if (rows[5].Text != " " && rows[6].Text != " ") 
     { 
      if (!string.IsNullOrEmpty(rows[5].Text) || 
       !string.IsNullOrWhiteSpace(rows[5].Text) && 
       !string.IsNullOrEmpty(rows[6].Text) || 
       !string.IsNullOrWhiteSpace(rows[6].Text)) 
      { 
       //do something here... 
      } 
     } 
    } 
} 
+1

外層循環似乎沒有對數據做任何事情?你只是做這個'nameList.Count'次?似乎缺少某些東西......你的意思是通過'i'來獲得選擇器嗎? ''itd_「+我'也許?事實上,你的內循環('k')也沒有做任何建設性的事情。我認爲這個例子已經破裂。如果代碼無意義,我們無法幫助您。 –

+0

當您不使用'k'並直接通過索引訪問'rows'時,'for'循環是什麼? – Lee

+6

你的代碼很奇怪。你不會在任何地方使用'i'和'k' – ghord

回答

0

試試上面的

rows.Where(x => x[5].Text != " " && x[6].Text != " ") 
      .Where(x=> !string.IsNullOrEmpty(x[5].Text) || !string.IsNullOrWhiteSpace(x[5].Text) 
       && !string.IsNullOrEmpty(x[6].Text) || !string.IsNullOrWhiteSpace(x[6].Text)); 
+0

冗餘...... –

+0

newStackExchangeInstance你是對的!這是一個快速解決方案:) –

+1

除了IsNullOrWhitespace之外,所有這些檢查都是無關緊要的。 –

2
var result = rows.Where(x => !string.IsNullOrWhitespace(x[5]) && !string.IsNullOrWhitespace(x[6])); 

這是會得到你想要的結果的IEnumerable

0

這將完全符合您的要求,僅在刪除了冗餘部件的情況下。假設//do something here..塊不更改行值。

for (int i = 0; i < nameList.Count; i++) 
{ 
    IList<IWebElement> rows = driver.FindElements(By.CssSelector("itd_1")); 
    if (!string.IsNullOrWhiteSpace(rows[5]) && !string.IsNullOrWhiteSpace(rows[6])) 
    { 
     for (int k = 0; k < rows.Count; k++) 
     { 
       //do something here... 
     } 
    } 
}