即使列表为空,C#列表计数也始终返回1

时间:2011-07-20 13:49:01

标签: c# list count

我正在尝试在C#中调试方法,但我的基本语法技能似乎缺乏!该方法接受日期列表作为逗号分隔的文本字符串。此字符串将转换为列表,然后进行处理。但是,即使将空字符串传递给方法,它仍然会在计算列表时输出1。

代码如下:

public static int DaysLeft(DateTime endDate, DateTime startDate, Boolean excludeWeekends, String excludeDates)
    {
        int counter = 0;

        List<string> excludeDatesList = new List<string>(excludeDates.Split(','));

        counter = excludeDatesList.Count;

        return counter;
    }

如果我将一个空字符串作为excludeDates参数传递,则返回1.如果我传递一个日期,则返回1.如果我传递两个日期,则返回2等等。所以它有点工作,除非没有通过在,当我希望它返回0但实际上它返回1.

有人能指出我正确的方向吗?

由于

9 个答案:

答案 0 :(得分:10)

即使对于空字符串,Split也会在数组中返回该字符串,因此将使用...一个空字符串创建列表,生成.Count 1. [编辑:您可以致电excludeDates.Split(',', StringSplitOption.RemoveEmptyEntries),以便不会。{/ p>

为了使您的函数按预期运行,您可能应该尝试解析从Split()返回的每个“日期”字符串,并且只增加计数器的有效日期。

这样的事情:

    int counter = 0;
    var possibleDates = excludeDates.Split(',');

    foreach (var dateStr in possibleDates)
    {
        // Right now it just counts "good" dates, though could also do something
        //  with each date as well
        DateTime dt;
        if (DateTime.TryParse(dateStr, out dt))
            counter++;
    }

    return counter;

如果您正在寻找最简单的方式,您应该只检查参数以查看它是否为空字符串,并在这种情况下返回0:

if (string.IsNullOrEmpty(excludeDates))
    return 0;

答案 1 :(得分:8)

分裂角色正在返回一个空元素。

请尝试使用excludeDates.Split(',', StringSplitOptions.RemoveEmptyEntries)

答案 2 :(得分:3)

您可以使用删除空条目选项。

var blah = "";

var split = blah.Split(new[]{';'}, StringSplitOptions.RemoveEmptyEntries);
var split2 = blah.Split(new[]{';'});

// Returns zero
Console.WriteLine(split.Length);

// Returns one
Console.WriteLine(split2.Length);

答案 3 :(得分:1)

这是正常行为。如果没有要拆分的东西,它将返回一个列表,其中字符串本身作为第一个元素,计为一个。

答案 4 :(得分:1)

String.Split()返回的数组总是有一个元素,即使它是空字符串。

答案 5 :(得分:1)

在列表中插入空字符串将创建一个元素的列表。那个元素就是你的空字符串。

答案 6 :(得分:1)

在不包含分隔符的字符串(在本例中为逗号)上调用string.Split的结果是包含单个元素的数组,即原始字符串。如果字符串为空,也会发生这种情况。

解决方案是指定Split以省略空条目:

List<string> excluseDatesList = new List<string>(excludeDates.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));

答案 7 :(得分:0)

正如dlev所说..但是要添加一个例子来说明,如果传入字符串 "," - 这只是一个逗号,然后",".Split(',').Count()将返回2。 对于只有四个逗号的",,,,",您将获得5个计数...

答案 8 :(得分:0)

如果你看一下Split方法,它有以下逻辑:

int num = this.MakeSeparatorList(separator, ref sepList);
if (num == 0 || count == 1)
{
    return new string[]
    {
        this
    };
}

因此,即使字符串是空字符串,它也会返回数组中的单个项目。