参数中通用字符串和简单字符串之间的歧义
Ambiguity between generic and simple string in params
我有 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);
有什么想法吗?谢谢
简单地说:where
限制在确定要使用哪个方法重载时不使用。因此,当您忽略该信息时,使用哪个重载就变得不明显了。您可能会争辩说精确马赫更好,但事实并非如此。如果忽略此信息,则可以使用字符串作为参数调用这两种方法。
我有 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);
有什么想法吗?谢谢
简单地说:where
限制在确定要使用哪个方法重载时不使用。因此,当您忽略该信息时,使用哪个重载就变得不明显了。您可能会争辩说精确马赫更好,但事实并非如此。如果忽略此信息,则可以使用字符串作为参数调用这两种方法。