当我试图在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 ????
}
}
}
我可以帮忙吗?
答案 0 :(得分:3)
DayOfWeek
是enum
因此它是值类型,值类型变量不能具有空值,除非标记为Nullable<>
,这意味着很可能是{{1}中的第一个值} DayOfWeek
是星期日这是默认值,因此只要enum
无法找到该值,它就会返回默认值 Sunday < / em>的
您应该使用Find
:
Contains
答案 1 :(得分:1)
枚举是值类型,Find
扩展方法在处理具有此类型的列表时具有以下行为(引自MSDN):
搜索包含值类型的列表时,请确保默认值 该类型的值不满足搜索谓词。除此以外, 没有办法区分表示的默认值 找不到匹配项,并且列表元素恰好具有默认值 类型的值。如果默认值满足搜索 谓词,改为使用
FindIndex
方法。