我将一个对象添加到列表中,然后将对象变量设置为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?
答案 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并修改旧对象,则将修改列表中的所有其他条目,因为它们指向同一对象。