我得到了这段代码,虽然它工作正常,但它在代码上给了我一个警告(可能是非预期的参考比较)(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();
}
}
}
答案 0 :(得分:2)
您收到此警告是因为您要将string
与object
进行比较。与所有自定义运算符一样,==
类型的自定义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为字符串。