Проверьте все аргументы метода, прежде чем использовать их!
Разрывается на этой строке: foreach (строковое слово в словах)
Помните, что foreach
зацикливает работу, вызывая GetEnumerator
для повторяющейся коллекции. То есть ваш цикл foreach
вызывает вызов words.GetEnumerator
, и этот вызов завершается ошибкой, если words
равен нулю.
Следовательно, проверьте ваш аргумент words
, добавив охрану в самом начале вашего CreateTags
метода:
if (words == null)
{
throw new ArgumentNullException("words");
}
Это поможет вам найти местоположение в вашем коде, где null
передается в CreateTags
, и затем вы сможете продолжить исправление вызывающего кода.
Предложение: по возможности избегайте null
.
Как очень общее правило, старайтесь по возможности избегать использования значений null
. Например, когда ваш код имеет дело с наборами и коллекциями элементов, вы можете убедиться, что он также работает правильно с пустыми коллекциями. На втором этапе убедитесь, что вы никогда не используете null
для представления пустой коллекции; вместо этого используйте, например, Генератор Enumerable.Empty<TItem>()
LINQ для создания пустой коллекции.
Единственное место, где вы могли бы начать это делать, - это метод CreateTags
, гарантирующий, что независимо от того, какие будут входные данные, этот метод всегда будет возвращать действительную ненулевую (но, возможно, пустую) коллекцию:
if (words == null)
{
return Enumerable.Empty<Tag>(); // You could do without LINQ by writing:
// return new Tag[] { };
}