checkitems可能是非预期的参考比较

时间:2011-10-29 04:27:24

标签: c# winforms linq checkedlistbox

我得到了这段代码,虽然它工作正常,但它在代码上给了我一个警告(可能是非预期的参考比较)(st.staff_name == chk)。我很困惑为什么会这样。帮助将不胜感激。谢谢。

    private void buttonCreateSubmit_Click(object sender, EventArgs e)
    {
        Body body = new Body
        {
            body_content = richTextBoxBody.Text
        };

        tnDBase.AddToBodies(body);
        tnDBase.SaveChanges();

        var genid = tnDBase.Genres.Single(g => g.genre_name == comboBoxGenre.Text);

        Article article = new Article()
        {
            article_name = textBoxTitle.Text,
            genre_id = genid.genre_id,
            status_id = 3,
            body_id = body.body_id
        };

        tnDBase.AddToArticles(article);
        tnDBase.SaveChanges();

        if (checkedListBoxWriter.CheckedItems.Count != 0)
        {
            for (int x = 0; x <= checkedListBoxWriter.CheckedItems.Count - 1; x++)
            {
                var chk = checkedListBoxWriter.CheckedItems[x];
                var staf = tnDBase.Staffs.SingleOrDefault(st => st.staff_name == chk);
                WriterLog writerlog = new WriterLog()
                {
                    article_id = article.article_id,
                    staff_id = staf.staff_id
                };
                tnDBase.AddToWriterLogs(writerlog);
                tnDBase.SaveChanges();
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

您收到此警告是因为您要将stringobject进行比较。与所有自定义运算符一样,==类型的自定义string运算符(比较字符串的而不是两个字符串是否具有引用相等性,它们是可能不会)只有当两个操作数都是string引用时才能工作。

如果你知道CheckedItems中的项目是string,那么只需将其转换为字符串:

SingleOrDefault(st => st.staff_name == (string)chk);

答案 1 :(得分:0)

我猜它会给你警告,因为你正在使用默认值 var chk = checkedListBoxWriter.CheckedItems[x];并将其与数据库项进行比较。尝试并询问特定值var chk = checkedListBoxWriter.CheckedItems[x].Value;或强制chk为字符串。