要将项目添加到列表中,是否需要创建新对象?

时间:2011-11-28 15:30:11

标签: c# .net

我将一个对象添加到列表中,然后将对象变量设置为null。要将另一个对象添加到列表,我需要创建一个新对象。我正在使用的代码如下:

UpdateData = new MismatchData();
   UpdateData.CINID = currentInLoopCIN_ID;
   UpdateData.ColumnMapID = <some integer>;
   UpdateData.WMSValue = <some integer>;
lsMismatchData.Add(UpdateData);
UpdateData = null;

我需要第一行吗?

UpdateData = new MismatchData(); //Do I need to have this line of code?

4 个答案:

答案 0 :(得分:3)

由于您将UpdateDate设置为null,因此当您尝试设置UpdateData.CINID时,第二次(您将访问空对象)时会出现错误。

您的空分配是这里的冗余代码行。由于您始终为变量分配new UpdateData,因此无需在其间重置。

无论是否使用空赋值,您仍然需要每次都创建一个新实例,否则您只需要更新旧实例。

如果你想减少代码行,你可以这样做:

lsMismatchData.Add(new UpdateData {
    CINID = currentInLoopCIN_ID,
    ColumnMapID = <some new integer>,
    WMSValue = <some new integer>
});

或者,既然你看起来像是在一个循环中,你可能会做这样的事情,让你的代码更加简洁:

var lsMismatchData = yourLoopSource.Select(x => new UpdateData {
    CINID = x.CIN_ID, // apply your own logic to getting the proper values here.
    ColumnMapID = x.XYZ,
    WMSValue = x.ABC
}).ToList();

答案 1 :(得分:2)

是的,当然。否则UpdateData将为null,您无法访问UpdateData.CINID

但是(使用C#3.0+)您可以使用以下语法缩短它:

lsMismatchData.Add(new MismatchData() { CINID = currentInLoopCIN_ID, ColumnMapID = <x> });

答案 2 :(得分:1)

是的,您必须将变量UpdateData的新对象实例化为

UpdateData = new MismatchData();

然后再开始填充其属性,然后再将其添加到lsMismatchData之前,否则您将获得空引用异常

答案 3 :(得分:0)

当然,否则您的引用为空。然后,当您尝试在添加新条目之前设置字段时,您将获得NullReferenceException。

如果您没有将其设置为null并修改旧对象,则将修改列表中的所有其他条目,因为它们指向同一对象。