最近,当我试图在一个DayOfWeek列表中找到一个特定的一天时,我遇到了一个问题--它在周日不是很好,但是在其他的日子里都有效。
我做了一个谓词,但是当我在一个空列表或不包含星期日的列表中寻找星期日时,它就会找到它。
例子:
namespace testing1
{
public partial class Timer : Form
{
public static List<dayOfWeek> day = new List<dayOfWeek>();//I can set things in it
public Timer()
{
InitializeComponent();
}
private void Timer_Load(object sender, EventArgs e)
{
Console.WriteLine(day.Count); //return 0 when I instantiate the form without inserting from an another form.
checkBox1.Checked = day.Find((dayOfWeek d) => { return d == dayOfWeek.Monday; }) == dayOfWeek.Monday; // return false OK
checkBox2.Checked = day.Find((dayOfWeek d) => { return d == dayOfWeek.Tuesday; }) == dayOfWeek.Tuesday; // return false OK
checkBox3.Checked = day.Find((dayOfWeek d) => { return d == dayOfWeek.Wednesday; }) == dayOfWeek.Wednesday; // return false OK
checkBox4.Checked = day.Find((dayOfWeek d) => { return d == dayOfWeek.Thursday; }) == dayOfWeek.Thursday; // return false OK
checkBox5.Checked = day.Find((dayOfWeek d) => { return d == dayOfWeek.Friday; }) == dayOfWeek.Friday; // return false OK
checkBox6.Checked = day.Find((dayOfWeek d) => { return d == dayOfWeek.Saturday; }) == dayOfWeek.Saturday; // return false OK
checkBox7.Checked = day.Find((dayOfWeek d) => { return d == dayOfWeek.Sunday; }) == dayOfWeek.Sunday; // return true WTF ????
}
}
}我能帮忙吗?
发布于 2018-04-24 14:06:52
DayOfWeek是一个enum,因此它的值类型、值类型变量不能有空值,除非标记为Nullable<>,这意味着DayOfWeek enum中的第一个值很可能是Sunday,这将是默认值,因此每当Find无法找到该值时,它就返回默认值为Sunday。
您应该使用Contains:
day.Contains(DayOfWeek.Sunday);
//..发布于 2018-04-24 14:10:51
Enum是值类型,Find扩展方法在处理这种类型的列表(引用自MSDN)时具有以下行为:
搜索包含值类型的列表时,请确保该类型的默认值不满足搜索谓词。否则,无法区分表示未找到匹配的默认值和碰巧具有该类型默认值的list元素。如果默认值满足搜索谓词,则使用
FindIndex方法。
https://stackoverflow.com/questions/50003661
复制相似问题