使用过多的布尔值

KTL*_*ind 1 c#

有一个更好的方法吗?

foreach (var line in lines)
{
    bool t01 = line.Model.ToLower() == model;
    bool t02 = line.Authority.ToLower() != "unknown";
    bool t101 = line.Type.ToLower() == "adcn";
    bool t102 = line.Type.ToLower() == "adcn/adv";
    bool t103 = line.Type.ToLower() == "bn";
    bool t104 = line.Type.ToLower() == "book";
    bool t105 = line.Type.ToLower() == "cancel";
    bool t106 = line.Type.ToLower() == "cir";
    bool t107 = line.Type.ToLower() == "coord sht";
    bool t108 = line.Type.ToLower() == "cre";
    bool t109 = line.Type.ToLower() == "ddr";
    bool t110 = line.Type.ToLower() == "dl";

    if (t01 && t02)
        if ((t101 || t102 || t103 || t104 || t105 || t106 || t107 || t108 || t109 || t110))
            Console.WriteLine(line);
}
Run Code Online (Sandbox Code Playgroud)

它实际上升到t139.因为简洁而剪裁了它.

Jon*_*eet 14

听起来你需要一个HashSet<string>类型:

static readonly HashSet<string> ValidTypes = new HashSet<string>
    (StringComparer.OrdinalIgnoreCase)
{
    "adcn", "adcn/adv", "bn" ...
};

if (line.Model.Equals(model, StringComparison.OrdinalIgnoreCase) &&
    !line.Authority.Equals("unknown", StringComparison.OrdinalIgnoreCase) &&
    validTypes.Contains(line.Type))
{
    Console.WriteLine(line);
}
Run Code Online (Sandbox Code Playgroud)

这也比单独比较每个项目的字符串更快.请注意,虽然我已经OrdinalIgnoreCase在上面使用过,但这可能不是你真正想要的 - 你可能想要CurrentCultureIgnoreCase或者InvariantCultureIgnoreCase.

(请注意,为了进行区分大小写的比较低的套管柱是一个坏主意-尤其是如果你只是使用默认语言环境做的.例如,如果你小写"邮件"和您的电流. locale是土耳其语,你不会得到"邮件".)