К сожалению, вам придется сообщить компилятору, что вы знаете больше о ситуации, чем она.
Одной из причин может быть то, что метод Where
не был аннотирован вспособ, который позволяет компилятору понять гарантию необнуляемости, и при этом фактически невозможно аннотировать это. Может быть случай добавления дополнительной эвристики к компилятору для понимания некоторых базовых случаев, таких как этот, но в настоящее время у нас его нет.
Таким образом, одним из вариантов будет использование оператора прощения null, в разговорной речи известный как «оператор черт возьми». Вы сами к этому прикасаетесь, однако вместо того, чтобы разбрызгивать восклицательные знаки по всему коду, где вы используете коллекцию, вы можете вместо этого сделать дополнительный шаг при создании коллекции, которая, по крайней мере для меня, делает ееболее приемлемый:
var nonNullItems = items.Where(item => item != null).Select(s => s!);
Это пометит nonNullItems
как IEnumerable<string>
вместо IEnumerable<string?>
и, таким образом, будет корректно обрабатываться в остальной части вашего кода.