C# 空位置的拆分字符串问题

C# 空位置的拆分字符串问题,c#,arrays,string,split,C#,Arrays,String,Split,我一周中有一连串的日子。我用C#解析它,并将每天存储在一个单独的变量中。例如: string weekdayName = "Mon,Tue,Wed,Thu,Fri,Sat,Sun"; 我使用“,”作为分隔符拆分它们: var weekDayName = weekDay.Split(','); var firstDay = weekDayName[0]; var secondDay = weekDayName[1]; var thirdDay = weekDayName[2]; var four

我一周中有一连串的日子。我用C#解析它,并将每天存储在一个单独的变量中。例如:

string weekdayName = "Mon,Tue,Wed,Thu,Fri,Sat,Sun";
我使用“,”作为分隔符拆分它们:

var weekDayName = weekDay.Split(',');
var firstDay = weekDayName[0];
var secondDay = weekDayName[1];
var thirdDay = weekDayName[2];
var fourthDay = weekDayName[3];
var fifthDay =  weekDayName[4];
var sixDay = weekDayName[5];
var seventhDay = weekDayName[6];
一切正常。但是,字符串会动态更改。用户指定一周中的几天。例如,字符串weekDayName只能包含“Mon,Tue”。但我遇到的问题是,如果不是所有的位置都包含值,它将失败

索引超出了数组的边界

我试过:

if (weekDayName[5].Length >0)
{
    var sixDay = weekDayName[5];
}
但它还是失败了

如何检查和获取现有数据的值,如果缺少某些位置,我将忽略它们

我想要实现的是:

DateTime currentDay = new DateTime();
currentDay = DateTime.Now;

if (currentDay.ToString("ddd") == firstDay || currentDay.ToString("ddd") == seconday)
{
    // I will check the currentDay against every day of the week
    //do something
}

你的指数超出范围不是从你认为的地方来的。我当然是这样假设的,因为如果用户输入
Mon,Tue
,您试图检查从未设置的元素的长度

var enteredDays = weekDay.Split(',');
for(var i = 0; i < enteredDays.Length; i++)
{
    var day = enteredDays[i];
    if(i == 0)
       first = day;
    else if(i == 1)
       second = day;

    ... etc....
}
var enteredDays=weekDay.Split(',');
对于(变量i=0;i

现在,当需要使用从数组中提取的值时,可以检查
String.IsNullOrEmpty(…yourDay..)
。你不能在它们上使用
.Length
,因为它们是
空的
,除非你将它们都默认为
字符串,否则它们会爆炸。空的

一定有更聪明的方法,但因为我不知道字符串的来源,所以我很难找到更好的解决方案

但是,根据当前的要求,您可以执行以下操作:

string weekdayName = "Mon,Tue,Wed,Thu,Fri,Sat,Sun";

List<String> weekDaysList = weekdayName.Split(',').ToList();

foreach (var weekDay in weekDaysList.Take(2))
{
       if (weekDay == DateTime.Now.ToString("ddd"))
       {
              // do something
              break;
       }

 }
string weekdayName=“周一、周二、周三、周四、周五、周六、周日”;
List weekDaysList=weekdayName.Split(',').ToList();
foreach(var weekDay在weekDaysList.Take(2))中)
{
if(weekDay==DateTime.Now.ToString(“ddd”))
{
//做点什么
打破
}
}

如果您愿意尝试Linq(这是C#3.5及更高版本的语言功能,只需包含
System.Linq命名空间
),您可以这样做:

string[] names = weekdayName
    .Split(',')
    .Select(s => s.Trim())
    .Where(s => s.Length > 0)
    .ToArray();

名称
数组现在包含所有非空的日期名称,没有任何前导空格或尾随空格。

哇,这是一个简单检查的大量代码,正如其他成员所提到的,您可以使用LINQ在单个查询中合并所有验证,例如:

string weekdayName = "Mon,Tue,Wed,Thu,Fri,Sat,Sun";
var wc = weekdayName.Split(',');

if (wc.Any(str => str.Contains(DateTime.Today.DayOfWeek.ToString().Substring(0,3))))
{

}

请尝试此操作,如果您有任何问题,请告诉我。

此检查
if(weekDayName[5]。Length>0)
应为
if(weekDayName.Length>0)
。当前您正在尝试检查字符串的长度,而不是数组的长度。但一定有更好的方法来处理这个问题,为什么不使用enumI我很好奇为什么DateTime为您提供数据时您要尝试解析这些数据:)Pheonixblade9,我实际上是从注册表中获取字符串。“我实际上是从注册表中获取字符串”上帝保佑您。那么您如何处理第一天的
呢,
第二天
第三天
?为什么您不能使用
字符串[]天