wizklaus Ответов: 2

Как создать пользовательскую проверку для модели, включающей список<T>


public class Parameter
{
  public int Id {get;set;}
  public string name {get;set;}
  public List<Phonenumbers> number {get;set;}
}

public class Phonenumbers
{
  public string number1 {get;set;}
  public string number2 {get;set;}
}


public Task<bool> Content(Parameter par)
{
  if(string.IsNullOrWhiteSpace(par.Id).ToString()))
    {
      //Todo
    }
 if(string.IsNullOrWhiteSpace(par.name))
    {
      //Todo 
    }
   
//I want to also validate List contents (number1,number2) fields if IsNullOrWhiteSpace
}


Что я уже пробовал:

<pre>

public class Parameter
{
  public int Id {get;set;}
  public string name {get;set;}
  public List<Phonenumbers> number {get;set}
}

public class Phonenumbers
{
  public string number1 {get;set;}
  public string number2 {get;set;}
}


public Task<bool> Content(Parameter par)
{
  if(string.IsNullOrWhiteSpace(par.Id).ToString()))
    {
      //Todo
    }
 if(string.IsNullOrWhiteSpace(par.name))
    {
      //Todo 
    }
 if(string.IsNullOrWhiteSpace(par.Phonenumbers.Any(x => x.number1== null).ToString()))
    {
      //Todo 
    }
}

2 Ответов

Рейтинг:
20

Simon_Whale

Я бы немного изменил ваш код здесь. Я изменил тип возврата здесь только на a bool поскольку я не уверен, что это такое. Task<bool> что здесь делается

public bool Content(Parameter par)
{
  if(par != null)
  {
    //int can not be null but it can have a default number
    //so test for that, unless the type is int? then you can 
    //test for null directly
    if(par.Id != 0)
    {
       //Todo
    }

    if(String.IsNullOrWhileSpave(par.name))
    {
      //Todo
    }

    if(par.Phonenumbers != null)
    {
      var failed = par.Phonenumbers.Count(p=> String.IsNullOrEmpty(p.number1) || String.IsNullOrEmpty(p.number2));
      if(failed > 0) 
      {
        //todo
      }
    }
  }
}


wizklaus

Спасибо за ваше решение. это помогло в ее решении. что касается задачи "bool", то мой проект состоит из асинхронных методов, где я жду результата.

Рейтинг:
2

WiganLatics

Нет смысла преобразовывать поле Id из int в string - оно будет по умолчанию равно 0, если вы его не зададите. Поэтому вы должны просто проверить, что он находится в допустимом диапазоне (например, больше 0).

Вам нужно проверить, что par объект не является нулевым перед попыткой доступа к свойству numbers. В противном случае вы получите исключение Null Reference, когда объект равен null.
Кроме того, если количество numbers если 0, то он не найдет никаких телефонных номеров.


// Int will always be populated (it defaults to 0 if you don't set it).
if (par.Id <= 0)
{
    Console.WriteLine("1");
}
if (string.IsNullOrWhiteSpace(par.name))
{
    Console.WriteLine("2");
}
if (par.number == null ||
    par.number.Count == 0 ||
    par.number.Any(x => x.number1 != null || x.number2 != null)
    )
{
    Console.WriteLine("3");
}