Описание проблемы
Я работаю с C# 8 и ссылочными типами Nullable.
Я получаю предупреждения с помощью такого метода:
private IList<Person?> persons;
// some initialisations here....
IList<Person> GetPersons()
{
return someList.Where(t => t != null).ToList();
}
Предупреждение:
[CS8619] Nullability of reference types in value of type
'IList<Person?>' doesn't match target type 'IList<Person>'.
Я также попробовал следующее:
return someList.Where(t => t != null).Select(t => t!).ToList();
Но я получил то же предупреждение !!
Решение (не очень удачное)
Единственный найденный мной обходной путь:
IList<Person> GetPersons()
{
return someList.Where(t => t != null).Select(t => Some(t)).ToList();
}
// THIS REMOVES THE WARNING
private Person Some(Person? person) => person!;
Однако, если я хочу сделать его обобщенным c, он не работает .... Я снова получаю предупреждение, и этот метод возвращает Person?
private T Some<T>(T? t) where T: class => t!;