0

次のコードに問題があります。以下は私のモデルコードです

public class Comments
{
    public string displayComments { get; set; }

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime? dTime { get; set; }

    public int airPortId { get; set; }
}

public class LstComments
{
    private List<Comments> _lstcomment = new List<Comments>();

    public List<Comments> lstCommet
    {
        get
        {
            return _lstcomment;
        }
        set
        {
            _lstcomment = value;
        }
    }
}

mycontroller では、EF からデータを取得し、それを For ループのプロパティに追加しています。以下のコード

Comments com = new Comments();
LstComments savedComments = new LstComments();

AirportEntities airPortEntity = new AirportEntities();

var userComments = from c in airPortEntity.AirportComments
                    select c;

//List<Comments> savedComments = new List<Comments>();

foreach (var item in userComments)
{
    com.displayComments = item.Comments;
    com.dTime = item.Time;

    savedComments.lstCommet.Add(com);            
}

私の問題は、リスト全体が同じレコード (最近追加されたデータ) で更新されていることです

たとえば。foreach 3rd timn は、リスト内の 1 番目と 2 番目の 3 番目の項目の両方を 3 番目の項目データで更新します。

私は何を間違っていますか?

4

2 に答える 2

5

Commentsループの外でインスタンス化します。これは、ヒープ上に同じコメント オブジェクトへの参照が多数あることを意味します。あなたがする必要があります

Comments com = new Comments(); foreachの内部。これにより、1 つのインスタンスに新しい値を与えるだけでなく、反復ごとに個別のインスタンスが作成されます。

于 2013-02-26T14:01:48.943 に答える
3

Comments com = new Comments();foreach で毎回インスタンス化する必要があります。今のところ、同じオブジェクトへの参照を書き換えるだけです。

または、 foreach を次のように書き直す方が適切です。

    foreach (var item in userComments)
    {
        savedComments.lstCommet.Add(
           new Comments()
           {
               com.displayComments = item.Comments,
               com.dTime = item.Time
           });  
    }
于 2013-02-26T14:01:40.257 に答える