我正在寻找一种集合类型/方法,我可以将一个对象添加到一组对象中,然后单独更改该对象的属性,并将这些更改反映在集合中的对象中。
我听说 List<T> 通过引用添加值,所以我认为引用将指向同一个对象。换句话说,我假设:
List<string> valuesList = new List<string>();
string initialValue = "Alpha";
valuesList.Add(initialValue);
initialValue = "Bravo";
bool incorrectAssumption = (valuesList[0] == "Bravo");
我曾希望 'valuesList' 将包含新值“Bravo”。尝试了一下,我意识到 List复制了引用,它没有吸收它,所以 valueList 仍然只有“Alpha”值。有什么方法可以将集合用作它们包含的少数合法对象?
如果它有助于了解实际的业务需求......
List<BaseWidget> widgets = new List<BaseWidget>();
DerivedWidget specialWidget = new DerivedWidget();
DerivedWidget extraSpecialWidget = new DerivedWidget();
widgets.Add(specialWidget);
widgets.Add(extraSpecialWidget);
specialWidget.Run();
extraSpecialWidget.Run();
if (!widgets.Any(x => x.RunSuccessfully)) return false;
(其中 Run() 方法设置了 RunSuccessfully 属性,我希望将其反映在“小部件”列表中。)
==================================================== ===========================
更新
正如答案和评论中指出的那样,业务需求模型和试运行示例之间存在一些差异。我会把人生的教训浓缩成这个:似乎List<objects>
他们的变化被跟踪了,而List<values>
没有。