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