Предупреждение, допускающее значение NULL, при обновлении до синтаксиса элементов расширенияC#

Место общения программистов C#
Ответить
Anonymous
 Предупреждение, допускающее значение NULL, при обновлении до синтаксиса элементов расширения

Сообщение Anonymous »

У меня есть две версии вспомогательных методов для входа в ILogger. Первый (классические методы расширения) компилируется нормально; второе использование членов расширения приводит к появлению кода ошибки/предупреждения компилятора.

CS8620: Аргумент типа «(string, object EntityPath)» нельзя использовать для «областей» параметра типа «(строковый ключ, объект? значение)[]

Рабочая версия:

Код: Выделить всё

public static class LoggerExtensions
{
public static IDisposable? BeginKeyValueScope(this ILogger logger,
params (string key, object? value)[] scopes)
{
return logger.BeginScope(
new Dictionary(scopes.Select(x =>
new KeyValuePair(x.key, x.value))));
}

public static IDisposable? BeginAzureServiceBusReceptionScope(this ILogger logger, ProcessMessageEventArgs args)
{
return logger.BeginKeyValueScope(
("AzureServiceBusEntityPath", args.EntityPath),
("AzureServiceBusMessageId", args.Message.MessageId)
);
}
}
Неверная версия с использованием членов расширения:

Код: Выделить всё

public static class LoggerExtensions
{
extension(ILogger logger)
{
public IDisposable? BeginKeyValueScope(params (string key, object? value)[] scopes)
{
return logger.BeginScope(
new Dictionary(scopes.Select(x =>
new KeyValuePair(x.key, x.value))));
}

public IDisposable? BeginAzureServiceBusReceptionScope(ProcessMessageEventArgs args)
{
return logger.BeginKeyValueScope(
("AzureServiceBusEntityPath", args.EntityPath),
("AzureServiceBusMessageId", args.Message.MessageId)
);
}
}
}
Почему версия с элементами расширения запускает CS8620, а классическая версия — нет?
Это ограничение/ошибка компилятора (менее вероятно) с новым синтаксисом элементов расширения или я делаю что-то неправильно (гораздо более вероятно).

Подробнее здесь: https://stackoverflow.com/questions/798 ... ers-syntax
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»