Как проверить, не являются ли определенные свойства объекта не пустыми в C # - PullRequest
1 голос
/ 22 марта 2012

У меня есть класс

class A {
    propA { get; set; }
    propB { get; set; }
    propC { get; set; }
    target { get; set; }
}

Я определяю цель класса A и заполняю класс пользовательским вводом.Каждая отдельная цель будет означать, что требуются разные свойства класса (не пусто / пусто).

Так, если моя цель - банан, тогда propA и propB не должны быть пустыми.Если яблоко, то propB и propC не должны быть пустыми.Мне нужно сделать это при запуске приложения, чтобы не продолжать выполнять проверки на более поздней стадии, поскольку некоторые методы и вызовы БД потребуют данных и т. Д.

Каков наилучший способ кодирования этого?или даже по дизайну.Это хорошая практика для хранения, какие свойства требуются для каждой цели в перечислении?А затем используйте то, что предоставлено ниже lazyberezovsky, чтобы проверить и проверить ??

В приведенном выше примере есть только 3 свойства, но то, что я действительно должен сделать, имеет кучу больше.

Я только простоначал искать способы проверки моего кода.

Таким образом, этот вопрос состоит из двух частей.- Как проверить, является ли свойство класса пустым - Хранить списки различных объединенных обязательных свойств, где можно использовать метод проверки

РЕДАКТИРОВАТЬ: извините!Я отредактировал, чтобы, надеюсь, сделать из этого больше смысла.

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Позвольте мне попытаться угадать, о чем был вопрос:)

Вот валидатор типа, который может проверять наличие открытых свойств параметра:

public class TypeValidator<T>
{
    public bool IsPropertyExists(string propertyName)
    {
        Type type = typeof(T);
        BindingFlags flags = BindingFlags.Instance | BindingFlags.Public;
        foreach (PropertyInfo property in type.GetProperties(flags))
            if (property.Name == propertyName)
                return true;

        return false;
    }
}

Использование с вашим классом:

TypeValidator<a> validator = new TypeValidator<a>();
validator.IsPropertyExists("PropB")

Или вы можете использовать его как метод расширения public static bool IsPropertyExists<T>(this T t, string propertyName) с любым объектом или универсальным параметром. Но для меня рефлексия - это зло :) Попробуй решить эту проблему намеренно.

1 голос
/ 23 марта 2012

Я думаю, что вы после проверки модели.Если это так, возможно, хорошим местом для размещения вашей логики проверки является метод класса A, например:

Class A
{
   Nullable<int> propA { get; set; }
   int? propB { get; set; }
   int? propC { get; set; }
   string target { 
      get { return _target; } 
      set { 
         var oldtarget = _target;
         _target = value; 
         if !IsValid() 
         {
             _target = oldtarget;
             throw new Exception("Setting target to " 
                        + value 
                        + " is not possible, ....");
         }
      } 
   }

   public bool IsValid()
   {
       switch (_target)
       {
           case "banana":
              return propA.HasValue() && propB.HasValue();

           case "apple":
              return propB.HasValue() && propC.HasValue();
       }

       return true;
   }
}

Как проверить, является ли propA пустым?Зависит от того, что такое propA ... это int?бул?строка?и т.д. ... при условии, что это int, чем вы можете использовать метод, описанный выше ...

Не могу придумать более "общую" проверку, чем IsValid (), то есть я не могу думать оболее общий способ проверки, не зная больше ...

0 голосов
/ 22 марта 2012

Полагаю, вы имеете в виду проверку, когда говорите, что свойство существует.

Вы не указали, является ли оно веб-приложением или приложением Win Form / Wpf (или whatelse).

Вы можете реализоватьIDataErrorInfo на вас Классы и проверить, правильно ли были заполнены свойства.

Есть множество примеров, чтобы найти при поиске Google на IDataErrorInfo + Validate, но вот некоторые, которые помогли мне в прошлом:

http://www.arrangeactassert.com/using-idataerrorinfo-for-validation-in-mvvm-with-silverlight-and-wpf/

Как проверить дочерние объекты путем реализации IDataErrorInfo в родительском классе

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