Функция поиска возвращает исключение ArgumentNullException при компиляции

#c# #asp.net-mvc

#c# #asp.net-mvc

Вопрос:

Когда я пытаюсь скомпилировать свой код, в предложении ‘Where’ возникает ошибка исключения ArgumentNullException. Я думаю, что я все делаю хорошо в этом. Нужно ли мне какое-либо начальное значение (в параметре ActionResult)?

Контроллер:

     public class HomeController : Controller
    {

       private IDocuments _docs;

       public ActionResult Index(string custNr)
        {
            var docsModel = _docs.GetAll();
            var model = docsModel
                                   .Where(w => w.docsModel.ACCOUNT.Contains(custNr) || custNr == null) //here shows me an error
                                   .Select(s => new DocumentsModel
                                   {
                                       Company = s.docsModel.COMPANY,
                                       CustName = s.docsModel.NAME,
                                       Account = s.docsModel.ACCOUNT.Trim(),

                                   })
                                          .OrderBy(o => o.DATE);
            return View(model);
        }
  

Вид:

         <th>
            @using (Html.BeginForm("Index", "Home", FormMethod.Get))
            {
                <p>
                    Name: @Html.TextBox("custNr")
                    <input type="submit" value="Search" />
                </p>
            }
        </th>
  

Необходимо добавить, что столбец in Account заполняется значениями, не имеет нулей

Ответ №1:

Это должно помочь инвертировать ваше OR-выражение:

 .Where(w => custNr == null || w.docsModel.ACCOUNT.Contains(custNr) )
  

Предложение OR всегда вычисляется слева направо. То, как вы это сделали, сначала выполнит Contains функцию, а затем проверит, является ли входной параметр null .

Наоборот Contains , функция -не будет вызываться, если аргумент равен null, поскольку выполняется первое предложение OR-, и оно не будет выполнять второе.

Contains строка никогда не должна вызываться с null в качестве входного параметра.

MsDoc о строке.Содержит:

Исключения

Исключение ArgumentNullException

значение равно нулю.