C # Листинг / Проверка переменных объекта? - PullRequest
0 голосов
/ 07 сентября 2010

В проекте ASP.NET MVC, над которым я работаю, мне необходимо проверить, являются ли битовые переменные в классе LINQ-To-SQL истинными.Пока что, проверив, является ли каждая переменная истинной или ложной, я затем помещаю значение поля в список и возвращаю его следующим образом:быть самым быстрым или простым способом сделать это.

Мне было интересно, можно ли каким-то образом иметь возможность динамически проверять значение переменной из массива строк, просматривая их с помощью цикла for или foreach.Например:

public List<String> GetVarList() {
    String[] array = {"SearchBar", "SomeField"};
    List<String> list = new List<String>();

    foreach (String field in array) {
        // Check whether or not the value is true dynamically through the array
    }

    return list;
}

Спасибо за любые предложения!

Ответы [ 2 ]

0 голосов
/ 08 сентября 2010

Конечно, вы можете использовать отражение для чего-то вроде этого:

private bool ValueWasSet(string propertyName)
{
    var property = fields.GetType().GetProperty(propertyName);
    return (bool)property.GetValue(fields, null);
}

public List<string> GetVarList()
{
    return new [] {"SearchBar", "SomeField"}
        .Where(ValueWasSet)
        .ToList();
}

Это очень прямолинейное решение для того, что вы хотите сделать, если у вас есть много элементов для просмотра.

ПРЕДУПРЕЖДЕНИЕ. Это НЕ быстрее, чем ваш код.Ваш код гораздо быстрее, чем этот ... но если вы хотите сделать это более динамично, вам придется заплатить небольшую цену за перфект.

0 голосов
/ 08 сентября 2010

Вы можете использовать отражение:

public List<String> GetVarList() {
    String[] array = {"SearchBar", "SomeField"};
    List<String> list = new List<String>();
    var type=fields.GetType();
    foreach (String field in array) {
        var prop=type.GetProperty(field);
        if ((bool)prop.GetValue(fields,null))
            list.Add(field);
    }

    return list;
}

Из вашего вопроса не ясно, являются ли SearchBar, SomeFields и т. Д. Полями или свойствами. Если это поля, измените код соответствующим образом (используйте GetField () вместо GetProperty ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...