Сопоставление идентификатора с идентификатором объекта в массиве

#c#

#c#

Вопрос:

каков лучший способ реализации этого шаблона?:

 void ValidateId(int Id, MyObject[] objects)
{
    foreach (var myObject in objects)
    {
        if (Id == myObject.Id){
            return;
        }
    }
    throw new Exception("Invalid Id");
}
  

Ответ №1:

во-первых, я бы не стал создавать исключение, если ситуация не является исключительной. Скорее, предпочитаю возвращать bool и обрабатывать возвращаемое значение false с приятным дружественным сообщением об ошибке.

что касается проверки, вы можете использовать Linq….

 bool ValidateId(int Id, MyObject[] objects)
{
   return objects.Any( o=>o.Id == Id );
}
  

Комментарии:

1. Да, в случае недопустимого идентификатора требуется исключение в моем коде. Я не очень хорошо знаком с Linq, поэтому, возможно, мне пора начать использовать его чаще, приветствую.

2. @lockstock: здесь он вернет false, если идентификатор недопустим.

3. @lockstock, если вы собираетесь проверить linq, вам следует изучить возможность использования Linqpad. это позволяет вам запускать запросы linq без необходимости создавать целую программу, и это даже подключит к базам данных SQL, чтобы вы могли запускать запросы к данным SQL.

Ответ №2:

Комментарии:

1. Да, я мог бы переопределить. Equals() для MyObject только проверяет, равны ли идентификаторы, но есть ли другой способ?

2. Вы упустили много деталей о том, как сделать этот метод полезным, особенно в свете других, более простых способов.