0

このコードを取得しましたが、正常に動作しますが、コード (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();
            }
        }
    }
4

2 に答える 2

2

を と比較しているため、この警告が表示stringされますobject。すべてのカスタム演算子と同様に、型のカスタム==演算子( 2 つの文字列の参照が等しいかどうかではなく、文字列のstringを比較します) は、両方のオペランドが参照である場合にのみ機能します。string

CheckedItemsの項目が s になることがわかっている場合はstring、それを文字列にキャストします。

SingleOrDefault(st => st.staff_name == (string)chk);
于 2011-10-29T04:32:10.543 に答える
0

var chk = checkedListBoxWriter.CheckedItems[x];のデフォルト値を取得してデータベースアイテムと比較しているため、警告が表示されていると思います 。特定の値を要求するvar chk = checkedListBoxWriter.CheckedItems[x].Value;か、chkを文字列にするようにしてください。

于 2011-10-29T04:37:41.767 に答える