Подтвердить что ты не робот

С# Неверные массивы

У меня есть функция поиска, но я бы хотел, чтобы LocationID представлял собой массив целых чисел, а не только одно целое число. Я не уверен, как это сделать, так как я хочу, чтобы он также был нулевым. Я смотрел на выполнение int?[], но тогда мне пришлось бы проверять HasValue каждой отдельной записи. Есть ли лучший способ?

Это то, что у меня есть:

public ActionResult Search(string? SearchString, int? LocationId,
    DateTime? StartDate,  DateTime? EndDate)
4b9b3361

Ответ 1

Массивы всегда являются ссылочными типами, как и string - поэтому они уже обнуляются. Вам нужно использовать (и только использовать) Nullable<T>, где T - тип значения, не допускающего значения NULL.

Итак, вы, вероятно, захотите:

public ActionResult Search(string searchString, int[] locationIds,
                           DateTime? startDate,  DateTime? endDate)

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

Вы также можете рассмотреть возможность изменения типа параметра на IList<int> или даже IEnumerable<int> более общим, например.

public ActionResult Search(string searchString, IList<int> locationIds,
                           DateTime? startDate,  DateTime? endDate)

Таким образом, вызывающий может передать, например, List<int>.

Ответ 2

Массивы являются ссылочными типами, поэтому вам не нужно ничего делать, вы уже можете пройти null:

Метод со следующей сигнатурой можно вызывать со всеми параметрами как null:

public ActionResult Search(string SearchString, int[] LocationIds,
                           DateTime? StartDate, DateTime? EndDate)


foo.Search(null, null, null, null);

Обратите внимание: я также удалил вопросительный знак после string, так как он также является ссылочным типом.