【发布时间】:2023-03-29 23:07:01
【问题描述】:
我有 2 种方法,其中一种适用于通用参数,另一种适用于常规字符串。它看起来像这样:
public static async Task PostAlertAsync(this IQueueService queueService,
AlertTypes alertType,
string orgId,
AlertDetailsBase details = null)
{
Guard.ArgumentNotNull(queueService, nameof(queueService));
Guard.ArgumentNotNullOrEmptyString(orgId, nameof(orgId));
var alertMessage = BuildAlertQueueMessage(alertType, orgId, details);
await queueService.SendMessageAsync(alertMessage);
}
public static async Task PostAlertAsync<T>(this IQueueService queueService,
AlertTypes alertType,
T source,
AlertDetailsBase details = null,
string customSubject = null)
where T: IAlertSource
{
Guard.ArgumentNotNull(queueService, nameof(queueService));
Guard.ArgumentNotNull(source, nameof(source));
var alertMessage = BuildAlertQueueMessage<T>(alertType, source, details, customSubject);
await queueService.SendMessageAsync(alertMessage);
}
我想知道,为什么调用编译下一个调用结果时出现歧义错误? String 在这种情况下显然没有实现 IAlertSource
QueueServiceCollection.Alerts.PostAlertAsync(AlertTypes.AzureAdDsProvisionCompleted, orgId);
有什么想法吗?谢谢。
【问题讨论】:
-
你有默认参数。编译器不知道您尝试将默认值用于哪个版本的方法。
-
@KennethK。是的,而且我还需要参数。第二种方法不适用于调用,因为字符串不是 IAlertSource
标签: c# .net generics ambiguous-call