Преобразование нулевого литерала или возможного нулевого значения в тип, не допускающий значения NULL - PullRequest
0 голосов
/ 14 июля 2020

Можно ли устранить это предупреждение:

Преобразование нулевого литерала или возможного значения NULL в тип, не допускающий значения NULL.

без подавления для этого кода C#

 List<PropertyInfo> sourceProperties = sourceObject.GetType().GetProperties().ToList<PropertyInfo>();
            List<PropertyInfo> destinationProperties = destinationObject.GetType().GetProperties().ToList<PropertyInfo>();

            foreach (PropertyInfo sourceProperty in sourceProperties)
            {
                if (!Equals(destinationProperties, null))
                {
#pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type.
                    PropertyInfo destinationProperty = destinationProperties.Find(item => item.Name == sourceProperty.Name);
#pragma warning restore CS8600 // Converting null literal or possible null value to non-nullable type.

                   
                }
            }

, использующий отражение.

введите описание изображения здесь

Я использую Visual Studio 2019 и. NET Core 3.1.

1 Ответ

4 голосов
/ 14 июля 2020

Find() может вернуть null, если то, что вы ищете, не найдено. Итак, destinationProperty может стать нулевым.

Таким образом, решением было бы объявить его как допускающее значение NULL:

PropertyInfo? destinationProperty = ...

Или выбросить исключение:

PropertyInfo destinationProperty = ...Find() ?? throw new ArgumentException(...)
...