簡體   English   中英

C# 即使列表為空,列表計數也始終返回 1

[英]C# list count always returns 1 even when list is empty

我正在嘗試調試 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。

誰能指出我正確的方向?

謝謝

即使對於空字符串, Split也會在數組中返回該字符串,因此將使用...創建一個空字符串,生成.Count 1。 [編輯:您可以調用excludeDates.Split(',', StringSplitOption.RemoveEmptyEntries)以便它不會。]

為了使您的 function 行為符合您的預期,您可能應該嘗試解析從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;

拆分字符將返回一個空元素。

嘗試使用excludeDates.Split(',', StringSplitOptions.RemoveEmptyEntries)代替。

您可以使用刪除空條目選項。

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);

那是正常的行為。 當沒有要拆分的內容時,它將返回一個列表,其中字符串本身作為第一個元素,計為一個。

String.Split() 返回的數組總是有一個元素,即使它是空字符串。

在列表中插入一個空字符串將創建一個包含一個元素的列表。 該元素將是您的空字符串。

對不包含分隔符(在本例中為逗號)的字符串調用string.Split的結果是包含單個元素的數組,即原始字符串。 如果字符串為空,也會發生這種情況。

解決方案是指定Split以省略空條目:

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

正如dlev所說..但添加一個例子來說明,如果你傳入字符串"," - 這只是一個逗號,那么",".Split(',').Count()將返回2。對於",,,,"這只是四個逗號,你會得到 5 的計數......

如果您查看 Split 方法,它具有以下邏輯:

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

因此,即使字符串是空字符串,它也會返回數組中的單個項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM