Встроенное объявление делегата не будет соответствовать выделенному делегату [дубликат]C#

Место общения программистов C#
Ответить
Anonymous
 Встроенное объявление делегата не будет соответствовать выделенному делегату [дубликат]

Сообщение Anonymous »

Ниже приведен пример того, как я указываю конечную точку, как обычно, но я осознал ситуацию, которую не могу объяснить сам.
В первом примере я указываю делегат abcDelegate и использую его в .MapGet, где я ожидаю использовать эту подпись с делегатом, а не с RequestDelegate!

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

public static RouteHandlerBuilder MapGet(
this IEndpointRouteBuilder endpoints,
[StringSyntax("Route")] string pattern,
Delegate handler)
Работает, но это необязательно долго, если делегат не является лямбда-выражением:

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

internal sealed class CheckMailStatus : IEndpoint
{
private static async Task abcDelegate(string id, IEmailRepository emailRepository)
{
IEnumerable a = await emailRepository.GetAllAsync();
InternalGenericEmail? result = a.FirstOrDefault(p => p.Id.ToString() == id);

if (result is not null)
{
return TypedResults.Ok(result);
}

return TypedResults.NotFound($"Die angegebne Id: {id} ist nicht vorhanden");
}

public void MapEndpoint(IEndpointRouteBuilder app) => app.MapGet("api/notifier/generic/check/{id}", abcDelegate);
}
Когда делегат объявлен встроенным, проблема

Делегат "RequestDelegate" не принимает 2 аргумента

появляется:

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

internal sealed class CheckMailStatus : IEndpoint
{
public void MapEndpoint(IEndpointRouteBuilder app) => app.MapGet("api/notifier/generic/check/{id}", async (string id, IEmailRepository emailRepository) =>
{
IEnumerable a = await emailRepository.GetAllAsync();
InternalGenericEmail? result = a.FirstOrDefault(p => p.Id.ToString() == id);

if (result is not null)
{
return TypedResults.Ok(result);
}

return TypedResults.NotFound($"Die angegebne Id: {id} ist nicht vorhanden");
});
}
Я думал, что эти два примера одинаковы по функциям, или MapGet не поддерживает делегат как лямбда-выражение?
Пример на Dotnetfiddle.net

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

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

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

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

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

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