查找谓词DayOfWeek问题c#

时间:2018-04-24 14:01:32

标签: c# list find predicate dayofweek

当我试图在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 ????
        }
    }
}

我可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

DayOfWeekenum因此它是值类型,值类型变量不能具有空值,除非标记为Nullable<>,这意味着很可能是{{1}中的第一个值} DayOfWeek星期日这是默认值,因此只要enum无法找到该值,它就会返回默认值 Sunday < / em>的

您应该使用Find

Contains

答案 1 :(得分:1)

枚举是值类型,Find扩展方法在处理具有此类型的列表时具有以下行为(引自MSDN):

  

搜索包含值类型的列表时,请确保默认值   该类型的值不满足搜索谓词。除此以外,   没有办法区分表示的默认值   找不到匹配项,并且列表元素恰好具有默认值   类型的值。如果默认值满足搜索   谓词,改为使用FindIndex方法。