Динамическое получение значений ключей

1

Основной вопрос здесь, но я новичок в С#. У меня есть код, который в основном говорит: если условие A, тогда выполните блок кода в свойстве X. Если условие B, то выполните тот же блок кода в свойстве Y и так далее. Вместо того, чтобы дублировать мои кодовые блоки только для изменения одного имени свойства - a.Value.ValueX на a.Value.ValueY - есть способ вызвать ValueX или ValueY как переменные, такие как a.Value. {$ PropertyName}?

public static class Conditions
{
    public static bool A { get; set; }
    public static bool B { get; set; }
}

public class MyObjects
{
    public int ValueX { get; set; }
    public int ValueY { get; set; }
}

public class MyCollection
{
    public Dictionary<int, MyObjects> listOfObjects = new Dictionary<int, MyObjects>();

    public static void DoConditions()
    {
        foreach( var a in listOfObjects)
        {
            if(Conditions.A)
            {
                // do code using value x
                if (a.Value.ValueX > 0)
                    continue;
            }
            else if(Conditions.B)
            {
                // do the exact same code using value Y
                if (a.Value.ValueY > 0)
                    continue;
            }
        }
    }
}
  • 0
    Разве вы не можете просто извлечь общий код для метода, который вы вызываете с помощью a.Value.ValueX и a.Value.ValueY ?
  • 0
    Нет, потому что код, который дублирует выполнение, проходит через 2-й уровень вложенного словаря, что делает его бесполезным. Я бы все-таки дублировал много кода.
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

Вы можете сделать это:

int val = 0;
if(Conditions.A)
    val = a.Value.ValueX;
else if(Conditions.B)
    val = a.Value.ValueY;

// Your code block here using "val".
1

Создайте переменную и заполните ее соответствующим значением свойства:

foreach( var a in listOfObjects)
{
    int value;
    if(Conditions.A)
        value = a.Value.ValueX;
    else
        value = a.Value.ValueY;

    if(value > 0)
        continue;
    //other code using 'value'
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню