包含返回false

时间:2017-10-20 00:33:19

标签: c# contains

我有这样的代码

foreach (string item in summaryList)
{
    //kelola data
    if(item.Contains("Central"))
    {
        targetSummary = System.Math.Round(_context.Target.Where(x => x.Month == monthId && x.Region.Contains("Central") && x.Type == "SellThru").Select(y => y.Target1 ?? 0).Sum(), 2);
    }
    if (item.Contains("East"))
    {
        targetSummary = System.Math.Round(_context.Target.Where(x => x.Month == monthId && x.Region.Contains("East") && x.Type == "SellThru").Select(y => y.Target1 ?? 0).Sum(), 2);
    }
    if (item.Contains("West"))
    {
        targetSummary = System.Math.Round(_context.Target.Where(x => x.Month == monthId && x.Region.Contains("West") && x.Type == "SellThru").Select(y => y.Target1 ?? 0).Sum(), 2);
    }
    else
    {
        targetSummary = System.Math.Round(_context.Target.Where(x => x.Month == monthId && x.Region.Contains(item) && x.Type == "SellThru").Select(y => y.Target1 ?? 0).Sum(), 2);
    }
}

并且summaryList数据是

  

“ID-TR-Central,ID-TR-Java,ID-TR-East,ID-TR-West”

我不知道为什么

  

item.Contains(“Central”)和item.Contains(“East”)

返回false,使targetSummary值为无穷大,但

  

item.Contains( “西”)

做得很好

我只是不知道我的错误是什么。抱歉我的英语,我希望你理解,我感谢你的帮助。 感谢

1 个答案:

答案 0 :(得分:1)

首先:发布用于填充summaryList的代码。我认为你的意思是{"ID-TR-Central", "ID-TR-Java", "ID-TR-East, "ID-TR-West"},而不是"ID-TR-Central, ID-TR-Java, ID-TR-East, ID-TR-West"

如果您确实要输入单个字符串,那么每个条件都将匹配,targetSummary将被覆盖。

如果没有,你仍然有问题,因为你的最后一个if语句包含一个else分支。您可以更清楚地看到如果您的字符串不包含重新格式化的“West”会发生什么:

foreach (string item in summaryList)
{
    //kelola data
    if(item.Contains("Central"))
    {
        targetSummary = System.Math.Round(_context.Target.Where(x => x.Month == monthId && x.Region.Contains("Central") && x.Type == "SellThru").Select(y => y.Target1 ?? 0).Sum(), 2);
    }

    if (item.Contains("East"))
    {
        targetSummary = System.Math.Round(_context.Target.Where(x => x.Month == monthId && x.Region.Contains("East") && x.Type == "SellThru").Select(y => y.Target1 ?? 0).Sum(), 2);
    }

    if (item.Contains("West"))
    {
        targetSummary = System.Math.Round(_context.Target.Where(x => x.Month == monthId && x.Region.Contains("West") && x.Type == "SellThru").Select(y => y.Target1 ?? 0).Sum(), 2);
    }
    else
    {
        targetSummary = System.Math.Round(_context.Target.Where(x => x.Month == monthId && x.Region.Contains(item) && x.Type == "SellThru").Select(y => y.Target1 ?? 0).Sum(), 2);
    }

前两个条件并不重要,因为你的最终条件强迫任何没有“West”的东西进入最后的其他分支。无论以前的匹配条件如何,都会覆盖targetSummary。