У меня есть структура, полная элементов данных, которые будут использоваться для заполнения некоторых текстовых полей, и все текстовые поля будут иметь одинаковую функциональность. Например, цвет фона может измениться в зависимости от диапазона значения внутри текстового поля (значение берется из элемента данных из структуры), или элемент данных структуры может быть обновлен, если вы измените содержимое в текстовом поле и нажмете Enter .
Я хочу, чтобы моя реализация учитывала, что я могу добавить больше текстовых полей, связанных с другими элементами данных из структуры. Я думал об использовании массива кортежей типа, например, который связывал бы каждую пару TextBox и члена из структуры. Проблема в том, что целые числа не рассматриваются как ссылки в C #, а указатели не очень хорошая идея, поэтому я не могу просто поместить каждый элемент данных из структуры в этот массив.
Если я создам структуру, подобную этой
struct MyValues
{
int val1;
int val2;
int val3;
}
MyValues values = new MyValues;
Я хочу иметь возможность объявить массив кортежей
private static Tuple<TextBox, int>[] tuples =
{
(textBox1, values.val1),
(textBox2, value.val2),
(textBox3, values.val3),
};
И есть функции, которые используют массивы этого типа для выполнения операций над TextBoxes с использованием членов данных структуры.
private void Update(Tuple<TextBox, int>[] tuples)
{
foreach(Tuple<TextBox, int> t in tuples)
t.Item1.Text = t.Item2.ToString();
}
Этого нельзя сделать так, потому что члены int структуры копируются по значению при инициализации массива кортежей (а не по ссылке). Я думал об обёртывании int в новый тип объекта, чтобы я мог копировать по ссылке, но, возможно, есть лучшее решение.
Как я могу заставить эту работу? Должен ли я инкапсулировать int в объекте? Есть ли лучший шаблон дизайна для такой ситуации?
Спасибо