2013-06-12 3 views
-2

Этот код работает как ожидалось, но мне интересно, есть ли способ улучшить мой код с помощью Linq?Преобразование петлей в Linq

Что я делаю, это найти, есть ли значения строк [5] и rows [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_ "+ i' возможно? Фактически, ваш внутренний цикл ('k') не делает ничего конструктивного. Я думаю, что пример нарушен. Мы не можем вам помочь, если код бессмыслен. –

+0

Что такое цикл 'for', если вы не используете' k' и напрямую обращаетесь к строкам? – 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... 
     } 
    } 
} 
Смежные вопросы