【发布时间】:2015-04-21 09:39:47
【问题描述】:
我认为这个问题是 C# 等面向对象语言中的值/引用实例化问题。但我是新手,不知道如何转身。
我有一段代码的方法:
List<CSpropr> listActionpropr = CSpropr.searchList(actionCondition); // Get a list of all records of table PROPR for the 'actioncondition' specified
// For each record...
foreach (CSpropr instance in listActionpropr)
{
instance.ValName = "John";
instance.ValPhone = 323234232;
instance.update(); // This make and UPDATE of the record in DB
}
稍后在相同的方法中,我想在更新之前使用 listActionpropr 的第一个版本。进行某种回滚。但是,当我迭代 listActionpropr 变量时,我会得到包含 Name 和 Phone 值更改的记录列表。 例如:
foreach (CSApropr instance1 in listActionpropr )
{
instance1.update();
}
有没有一种优雅的方法来保存值而不创建对其他变量的新搜索?像这样:
List<CSpropr> listActionpropr = CSpropr.searchList(actionCondition); // Get a list of all records of table PROPR for the 'actioncondition' specified
List<CSpropr> preservedList = CSpropr.searchList(actionCondition); // Get a list of all records of table PROPR for the 'actioncondition' specified
// For each record...
foreach (CSpropr instance in listActionpropr)
{
instance.ValName = "John";
instance.ValPhone = 323234232;
instance.update(); // This make and UPDATE of the record in DB
}
....
foreach (CSApropr instance1 in preservedList )
{
instance1.update();
}
【问题讨论】:
-
为什么不把列表分配给保留列表???
-
这取决于
searchList()返回的内容。如果它总是返回新的对象,你可以照你写的去做。如果它总是返回相同的对象,那么不,你不能那么简单地做到这一点。它完全是特定于实现的。 -
恰如其分:一个对象是一个类的一个实例。
-
请参阅"Should questions include “tags” in their titles?",其中的共识是“不,他们不应该”!
-
好吧,如果你不能使用任何深拷贝方法,那么你唯一的希望就是
CSpropr.searchList每次调用时都会返回一个新的 CSpropr 列表。