Проблема возникает, потому что ваша схема БД не полностью нормализована.Полностью нормализованный подход будет состоять в том, чтобы выделить предмет в другую таблицу и создать отношение 1 к n.Но я согласен, что иногда нормализация, доведенная до предела, может добавить немного сложности, которая может показаться преувеличенной.
Если вы не хотите изменять свою схему, вы можете заключить свои свойства Subject
вindexer
public class Schedule
{
public string Subject1 { get; set; }
public string Subject2 { get; set; }
public string Subject3 { get; set; }
public string this[int index]
{
get {
switch (index) {
case 1: return Subject1;
case 2: return Subject2;
case 3: return Subject3;
default: return null;
}
}
set {
switch (index) {
case 1: Subject1 = value; break;
case 2: Subject2 = value; break;
case 3: Subject3 = value; break;
default: break;
}
}
}
Может использоваться следующим образом:
update[selectedNumber] = "Subject" + selectedNumber;
Недостатком является то, что это работает только для одной группы свойств, поскольку вы можете иметь только один индексатор с этой подписью;однако вы можете расширить его, включив в него имя свойства, если у вас есть более одного пронумерованного свойства.
public string this[string propertyName, int index]
C # не имеет именованных индексаторов;однако вы можете создать его с помощью посредника.В следующем примере я использую для этой цели вложенный класс.
public class SubjectAccessor
{
private readonly Schedule _schedule;
public SubjectAccessor(Schedule schedule) { _schedule = schedule; }
public string this[int index]
{
get {
switch (index) {
case 1: return _schedule.Subject1;
case 2: return _schedule.Subject2;
case 3: return _schedule.Subject3;
default: return null;
}
}
set {
switch (index) {
case 1: _schedule.Subject1 = value; break;
case 2: _schedule.Subject2 = value; break;
case 3: _schedule.Subject3 = value; break;
default: break;
}
}
}
}
public SubjectAccessor Subject { get; }
public Schedule()
{
Subject = new SubjectAccessor(this);
}
Может использоваться следующим образом:
update.Subject[selectedNumber] = "Subject" + selectedNumber;