[英]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.