Причина проблемы описана С. Шенкелем: вы просто переназначаете локальную переменную с помощью своего текущего псевдокода.
Если вы хотите обновить фактический объект, «указанный», вы могли бы, дляНапример, выполните следующие действия, чтобы получить доступ к реальному объекту и изменить фактическое поле интереса:
Вы можете получить доступ к фактическому объекту, например, так:
if (parameter != null)
{
parameter.value = newParameter.value;
}
Однако вы должны сделать value
открытое поле или свойство с общедоступным сеттером, чтобы иметь возможность сделать это.
Конечно, это просто чтобы дать вам идею.
Вероятно, вы должны сделать что-то более понятное / лучше инкапсулированное, как это:
class SecondaryClass
{
public MyObject parameter = new MyObject("key", 0);
public List<MyObject> list = new List<MyObject>();
public SecondaryClass()
{
list.Add(parameter);
}
public UpdateParameter(MyObject newParameter, string key)
{
// here you can write code that can *directly* access your field or list.
// you can, for instance, search for the object by key in the list, delete it from the list, and add `newParameter` to the list
// and reassign "parameter" with this new object.
}
}
Обратите внимание, что теперь вы можете отложить бремя поиска, если ключ существует в этом методе "UpdateParameter".
Ваш «основной» код может стать следующим:
foreach (MyObject newParameter in mainClass.list)
{
// Try to find a match, and update it in the parameterKey
secondaryClass.UpdateParameter(newParameter);
}
Примечание: я не понимаю идею использования «списка» параметров, в дополнение к наличию поля, хранящего один параметр.
Как предполагается, если у вас есть несколько пар ключ-значение, вы должны использовать Dictionary<string, MyObject>
в качестве внутреннего поля вашего MainClass и SecondaryClass, что значительно упростит доступ и читаемость вашего кода.