C # заставляет включать необязательные параметры? - PullRequest
0 голосов
/ 22 января 2019

У меня есть следующий метод от Microsoft:

public static string GetPathByAction(this LinkGenerator generator, 
   HttpContext httpContext, 
   string action = null, 
   string controller = null, 
   object values = null, 
   PathString? pathBase = null, 
   FragmentString fragment = default(FragmentString), 
   LinkOptions options = null);

Когда я вызываю этот метод без последнего параметра, я получаю ошибку:

  An expression tree may not contain a call or invocation that uses optional arguments

Если параметр является опцией, почемуЯ получаю такую ​​ошибку?

LinkGenerator - это класс:
https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.routing.linkgenerator?view=aspnetcore-2.2

Обновление

Я ввожу LinkGenerator в класс какследует (я не получаю сообщение об ошибке с этим кодом, потому что я передаю все параметры):

public class RequestHandler : IRequestHandler<Request, Response>> {

  private LinkGenerator _linkGenerator;

  public RequestHandler(LinkGenerator linkGenerator) {

    _linkGenerator = linkGenerator;

  } 

  public async Task<Response> Handle(Request request, CancellationToken cancellationToken) {

    List<File> files = getFiles();    

    // WORKS
    var url = _linkGenerator.GetUriByAction(action: "GetByUserId", controller: "FileController", null, "", new HostString());

    // DOES NOT WORK
    var = await files
      .Select(x => new Response {
        Id = x.File.Id,
        Url = _linkGenerator.GetUriByAction(action: "GetByUserId", controller: "FileController", null, "", new HostString())
      }).ToListAsync();

    // Remaining code 

  }

}

public class File { 
  public Int32 Id { get; set; }
  public String Url { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 22 января 2019
0 голосов
/ 22 января 2019

См. Также: Дерево выражений не может содержать вызов или вызов, использующий необязательные аргументы

Простой ответ заключается не в том, чтобы вызывать метод без необязательного параметра, вызывающего ошибку, а в том, как вы вызываете. Если вы вызываете метод в лямбда-выражении, он будет работать, только если вы укажете необязательные параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...