如何简化这段代码?

时间:2016-11-13 20:59:08

标签: c# uwp

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 = "";
}

仅列表中的索引正在更改。我怎样才能使这更简单?

2 个答案:

答案 0 :(得分: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 = "";
}

答案 1 :(得分: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 K. Rool我按照MethodMan的说法使用了一个switch语句,然后得到了这个。可以做得更好吗?