2011-11-28 57 views
0

我将一个对象添加到列表中,然后将对象变量设置为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

将对象设置为null,意味着你添加到list = null的对象。您应该每次都创建一个新对象,但不要将其设置为空。 –

+0

否我在添加到列表之前将值赋给对象,然后将该对象设置为null。 – inlokesh

+1

@Nathan:列表中的对象未设置为null。方法*中的*变量被赋予一个空引用。这不会以任何方式影响列表;它仍然包含对该对象实例的引用。 –

回答

3

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

您的空分配是这里冗余的代码行。由于您始终将new UpdateData分配给您的变量,因此您无需在两者之间进行重置。

不论是否指定null,您仍然需要每次都创建一个新实例,否则您只需更新旧实例。

如果你想削减的代码行,你可以做这样的事情:

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(); 
+0

我将问题添加到列表中后,当我更改项目值时,会影响列表中刚添加的项目吗? – inlokesh

+3

如果您删除'new'赋值*和* null'赋值,那么您将影响已添加的项目,是的。如果删除'new'赋值但保留'null'赋值,则会得到一个“未设置为对象实例的对象引用”错误。你需要保留'new'赋值,但是你可以删除'null'赋值。 –

+0

这是一个更好的实现,投票了 – MilkyWayJoe

2

是的,当然。否则UpdateData将是null,你不能访问UpdateData.CINID

但(使用C#3.0+),可以使用下面的语法,使之更短:

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

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

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

1

是的,你必须实例化一个新的对象变量UpdateData

UpdateData = new MismatchData(); 

,然后才能开始再次将其添加到lsMismatchData前再次​​,也尽显其性质,否则你会得到空参考例外

相关问题