Обнуляемые ссылочные типы. Отключен ли анализ потоков для вызовов стороннего кода? - PullRequest
0 голосов
/ 15 января 2020
string? storageAccountName = Environment.GetEnvironmentVariable("StorageAccountName");
string? storageKey = Environment.GetEnvironmentVariable("StorageKey");
var storageAccount = new CloudStorageAccount(new StorageCredentials(storageAccountName, storageKey), useHttps: true);
MyMethod(storageAccountName, storageKey);

private static void MyMethod(string storageAccountName, string storageKey)
{
}

Для этого кода VS2019 показывает предупреждение для вызова на MyMethod. Почему он не показывает его для вызова StorageCredentials, когда он также принимает string параметры?

1 Ответ

0 голосов
/ 25 апреля 2020

Я предполагаю, что тип StorageCredentials, который вы используете, не был аннотирован для обнуляемости, то есть средство проверки типов не знает, является ли допустимое значение обнуляемым или нет. Для таких случаев (когда тип «забывчивый») код анализируется так же, как это было в дни до NRT.

Это в отличие от вашего MyMethod метода, который существует в обнуляемом контексте и поэтому известно, что он не принимает нулевые ссылки. Следовательно, компилятор выдает предупреждения.

Со временем внешних библиотек без аннотаций должно становиться все меньше и меньше.

...