2016-11-13 3 views
-2
if (spanList.Count(p => p.ClassName == "p") == 2 && (spanList.Count(p => p.ClassName == "s") == 2)) 
{ 
    lesson.lesson2Name = spanList.Where(p => p.ClassName == "p").ToList()[1].TextContent; 
    lesson.lesson2Place = spanList.Where(p => p.ClassName == "s").ToList()[1].TextContent; 
    lesson.lesson2Tag = adressList.Where(p => p.ClassName == "n").ToList()[1].TextContent; 
    lesson.lesson2TagHref = adressList[1].GetAttribute("href"); 
} 
else if (spanList.Count(p => p.ClassName == "p") == 4 && (spanList.Count(p => p.ClassName == "s") == 2)) 
{ 
    lesson.lesson2Name = spanList.Where(p => p.ClassName == "p").ToList()[2].TextContent; 
    lesson.lesson2Place = spanList.Where(p => p.ClassName == "s").ToList()[1].TextContent; 
    lesson.lesson2Tag = spanList.Where(p => p.ClassName == "p").ToList()[3].TextContent; 
    lesson.lesson2TagHref = ""; 
} 

Только индекс в списке меняется. Как я могу сделать это проще?Как упростить этот код?

+1

Вы можете сделать это намного проще с помощью оператора case switch, а затем проверить, есть ли ClassName == 'p' || ClassName == 's', если вы не понимаете код, который у вас есть, затем разбивайте его на более простые шаги. также объясните подробнее, что проблема и проблема, кроме того, просто говорят, что только внутри списка меняется – MethodMan

+0

спасибо за предложение, проверьте код внизу – Niewidzialny

ответ

1

Это выглядит довольно плохо с точки зрения производительности и читаемости, поскольку вы повторяете весь список каждый раз, когда хотите узнать что-то об этом.

Вы должны попробовать что-то вроде

List<YourObject> pList = spanList.Where(p => p.ClassName == "p").ToList(); 
List<YourObject> sList = spanList.Where(p => p.ClassName == "s").ToList(); 
if (pList.Count == 2 && sList.Count == 2) 
{ 
    lesson.lesson2Name = pList[1].TextContent; 
    lesson.lesson2Place = sList[1].TextContent; 
    lesson.lesson2Tag = adressList.Where(p => p.ClassName == "n").ToList()[1].TextContent; 
    lesson.lesson2TagHref = adressList[1].GetAttribute("href"); 
} 
else if (pList.Count == 4 && sList.Count == 2)) 
{ 
    lesson.lesson2Name = pList[2].TextContent; 
    lesson.lesson2Place = sList[1].TextContent; 
    lesson.lesson2Tag = pList.ToList()[3].TextContent; 
    lesson.lesson2TagHref = ""; 
} 
+0

И подумать, что я не мог этого понять. Большое спасибо, я не знаю, как я его пропустил. Кроме того, «неужели мы не можем его упростить? – Niewidzialny

+0

проверить ответ внизу – Niewidzialny

0
var pList = spanList.Where(p => p.ClassName == "p").ToList(); 
var sList = spanList.Where(p => p.ClassName == "s").ToList(); 

if(sList.Count == 2) 
{ 
    string name = ""; 
    string tag = ""; 
    string taghref = ""; 

    switch(pList.Count) 
    { 
     case 2: 
      name = pList[1].TextContent; 
      tag = adressList.Where(p => p.ClassName == "n").ToList()[1].TextContent; 
      taghref = adressList[1].GetAttribute("href"); 
      break; 
     case 4: 
      name = pList[2].TextContent; 
      tag = pList[3].TextContent; 
      break; 
     default: 
      name = "error"; 
      break; 
    } 

    lesson.lesson2Name = name; 
    lesson.lesson2Place = sList[1].TextContext; 
    lesson.lesson2Tag = tag; 
    lesson.lesson2TagHref = taghref; 
} 

@Crusha К. Рул я использовал переключатель заявление, как сказал Methodman, и получить это. Можно ли это сделать лучше?

+0

Почему вы публикуете это как ответ, когда вам следует обновить свой исходный вопрос с этой публикацией ..? – MethodMan

+2

Я обычно не поклонник бесполезных заданий, если их можно избежать. Я бы просто поместил объявление 'string name;' там, без '= '"; 'part. Каждый случай в вашем операторе switch присваивает значение 'name', так что исходное назначение никогда не будет использоваться. Вы можете сделать то же самое для других переменных, просто добавив назначение по умолчанию как часть соответствующих случаев вместо того, чтобы делать это преждевременно. Но, в конце концов, это сводится к личным предпочтениям. –

+0

@MethodMan жаль для no-ogar с моего сайта, я делаю первые шаги в stackoverflow. Я буду помнить это. Спасибо за ваш ответ. Я буду писать, как ты сказал. – Niewidzialny

Смежные вопросы