Обновить свойства объектов в IEnumerable<>
Я работаю над программным обеспечением, которое следует использовать для экспериментов особого типа.
Эксперименты проводятся с использованием:
1) "Чип" (в основном XY-сетка известных размеров). 2) Каждый чип содержит "электроды", идентифицируемые их координатами X и Y на чипе и уникальным идентификатором. Каждый электрод также может удерживать или не удерживать образец, обозначенный простой булой (это биочувствительный чип).
У меня есть объекты, которые представляют это оборудование в C#.
Теперь мне нужно использовать оборудование в эксперименте;
1) У меня есть "Эксперимент", который выставляет IEnumerable с объектами "ExperimentStep". 2) "ExperimentStep" содержит имя и ограниченный список "электродов", участвующих среди прочего.
Некоторые этапы эксперимента могут выполняться одновременно и могут изменять свойство "HasSample" электрода. Поэтому, когда я выполняю "ExperimentStep", было бы полезно узнать, каково начальное свойство "HasSample" в любой момент времени.
Вот где моя проблема;
Если я просто передам объекты "Электрод" в "ExpermentStep", они, вероятно, будут переданы по значению... Возможно ли создать IEnumerable, содержащий ссылки на уникальные электроды, чтобы каждый раз, когда я хочу запустить "ExperimentStep", список "Электродов", используемых на этом шаге, содержит самое последнее значение для "HasSample"? Должен ли я использовать указатели для этого? Исходя из моих ограниченных знаний C++, я ожидаю, что это будет тривиально на этом языке (так как вы работаете с указателями большую часть времени). Но в C# я действительно понятия не имею (и я не достаточно опытен).
2 ответа
В C# класс является ссылочным типом. Это означает, что если вы создаете список экземпляров класса, а затем также добавляете экземпляры в другой список, то это те же самые элементы. Каждый список будет содержать ссылку. Так что для этого да, вы можете поднять элементы, используя IEnumberable.
Я подозреваю, что вы не понимаете разницу между ссылочными типами и типами значений, и что на самом деле означает передача по значению в C#.
Если предположить, Electrode
это класс, вы можете изменить свойства его экземпляра, и эти изменения будут видны через любую ссылку на тот же объект.
Я настоятельно рекомендую вам убедиться, что вы хорошо разбираетесь в системе типов.NET, прежде чем пытаться разрабатывать много производственного кода. Последствия непонимания того, что происходит, могут быть катастрофическими.
Пара моих статей на эти темы:
... но я предлагаю вам также получить хорошую вводную книгу по C#.