Проблема проверки, если какие-либо слова в списке содержат частичную строку .net - PullRequest
0 голосов
/ 14 марта 2011

Я использую C # .net и получаю исключение NullReferenceException в этот момент:

Request.Params.AllKeys.Any(l => l.Contains("stringImLookingFor"));

использовал это при отладке, а "stringImLookingFor" - это константа (поэтому никогда не null):

var aux = Request; 
var aux2 = Request.Params; 
var aux3 = Request.Params.AllKeys; 

И ничего из этого не было null. Я думаю, проблема в том, что l.Contains("stringImLookingFor") возвращает null. Есть идеи как это исправить ??

Thx.

Ответы [ 4 ]

3 голосов
/ 14 марта 2011

Ваша ошибка связана с тем, что одно из следующих значений является нулевым:

  • Запрос
  • Request.Params
  • Request.Params.AllKeys
  • l (используется в l.Contains (). Это произошло бы, если бы вам каким-то образом удалось получить там нулевой ключ)

Вы не можете определить, какой из однострочного лайнера.Либо придерживайтесь точки останова и проверяйте их вручную, либо добавьте код проверки, чтобы увидеть, является ли каждый из них нулевым.

Обновление:

Рекомендует

Request.Params.AllKeys.Any(l => !String.IsNullOrEmpty(l) &&
                           l.Contains("stringImLookingFor"));
0 голосов
/ 14 марта 2011

Ваше второе решение потенциально может быть очень неэффективным.

List ParamsList = Request.Params.AllKeys.Where(l => !string.IsNullOrEmpty(l)).ToList();
ParamsList.Any(l => l.Contains("CourseName"));

Выше требуется перебирать всю коллекцию для создания нового списка, а затем перебирать этот новый список до тех пор, пока вы не найдете соответствующий элемент. Ниже должно быть немного лучше:

Request.Params.AllKeys
    .Where(l => !string.IsNullOrEmpty(l))
    .Any(l => l.Contains("CourseName");

Это отфильтрует все наши нулевые значения, прежде чем оно вызовет Any. Это также будет означать, что в коллекции есть только одна итерация, и она остановится, как только будет найден курс.

0 голосов
/ 14 марта 2011

Я нашел проблему.Спасибо @Ian!

У меня был нулевой ключ на Request.Params.AllKeys.К настоящему времени мое решение:

Список ParamsList = Request.Params.AllKeys.Where (l =>! String.IsNullOrEmpty (l)). ToList ();

ParamsList.Any (l=> l.Contains ("CourseName"))

Если кто-нибудь найдет что-нибудь приятное, скажите мне, пожалуйста:)

0 голосов
/ 14 марта 2011

Вы уверены, что Request.Params или "stringImLookingFor" (если это переменная, а не константа) не равно нулю?

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