首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找谓词DayOfWeek问题c#

查找谓词DayOfWeek问题c#
EN

Stack Overflow用户
提问于 2018-04-24 14:01:31
回答 2查看 93关注 0票数 1

最近,当我试图在一个DayOfWeek列表中找到一个特定的一天时,我遇到了一个问题--它在周日不是很好,但是在其他的日子里都有效。

我做了一个谓词,但是当我在一个空列表或不包含星期日的列表中寻找星期日时,它就会找到它。

例子:

代码语言:javascript
复制
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 ????
        }
    }
}

我能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-24 14:06:52

DayOfWeek是一个enum,因此它的值类型、值类型变量不能有空值,除非标记为Nullable<>,这意味着DayOfWeek enum中的第一个值很可能是Sunday,这将是默认值,因此每当Find无法找到该值时,它就返回默认值为Sunday。

您应该使用Contains

代码语言:javascript
复制
day.Contains(DayOfWeek.Sunday);
//..
票数 3
EN

Stack Overflow用户

发布于 2018-04-24 14:10:51

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

搜索包含值类型的列表时,请确保该类型的默认值不满足搜索谓词。否则,无法区分表示未找到匹配的默认值和碰巧具有该类型默认值的list元素。如果默认值满足搜索谓词,则使用FindIndex方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50003661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档