我有一周的日子。我在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
}
答案 0 :(得分:2)
您的指数超出范围并非来自您的想法。我当然假设这是因为你试图检查一个从未设置的元素的长度,如果用户输入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....
}
现在,当您需要使用从数组中提取的值时,可以检查String.IsNullOrEmpty(..yourDay..)
。您不能.Length
使用null
,因为它们是string.Empty
并且会爆炸,除非您将它们全部默认为{{1}}。
答案 1 :(得分:0)
必须有一些更聪明的方法,但由于我不知道字符串的来源,我很难做出更好的解决方案。
但是,根据当前的要求,您可以执行以下操作:
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;
}
}
答案 2 :(得分:0)
如果您愿意尝试使用Linq(这是C#3.5及更高版本的语言功能,只需包含System.Linq namespace
),您可以这样做:
string[] names = weekdayName
.Split(',')
.Select(s => s.Trim())
.Where(s => s.Length > 0)
.ToArray();
names
数组现在包含所有非空日名称,没有任何前导或尾随空格。
答案 3 :(得分:0)
哇,这是一个简单检查的代码,正如其他成员所提到的,你可以使用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))))
{
}
尝试此操作,如果您有任何疑虑,请与我们联系。