2010-09-07 2 views
0

С проектом ASP.NET MVC, над которым я работаю, мне необходимо проверить, являются ли битовые переменные в классе LINQ-To-SQL истинными. До сих пор, после проверки, является ли или не каждая переменная является истинным или ложным, я задвиньте значение поля в список и вернуть его следующим образом:C# Листинг/Проверка переменных объекта?

public List<String> GetVarList() { 
    List<String> list = new List<String>(); 

    if (fields.SearchBar) { 
     list.Add("SearchBar"); 
    } 

    if (fields.SomeField) { 
     list.Add("SomeField"); 
    } 

    return list; 
}

Это, мне кажется, не будет самый быстрый или простой способ сделать это.

Мне было интересно, как его можно каким-то образом проверить значение переменной динамически из массива строк, пропустив их через цикл 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; 
}

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

+1

Что вы пытаетесь достичь с точки зрения конечного пользователя? –

ответ

0

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

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(); 
} 

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

CAVEAT: Это НЕ быстрее, чем ваш код. Ваш код намного быстрее, чем этот ... но если вы хотите сделать это более динамично, вы должны заплатить небольшую цену.

0

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

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 т.д. поля или свойства. Если они поле, измените код соответствующим образом (используйте ПолучитьПолеЗаголовок() вместо GetProperty())

Смежные вопросы