C#7 кортеж и асинхронность


Старый формат:

private async Task<Tuple<SomeArray[], AnotherArray[], decimal>>         
GetInvoiceDetailAsync(InvoiceHead invoiceHead) { ... }

Как вы можете сделать это в C#7 с новым форматом кортежей?

1 23

1 ответ:

Шаг 1: добавить NuGet-пакет ValueTuple для вашего проекта.

Шаг 2: Как говорит Лукас в своем комментарии, измените синтаксис на:
private async Task<(SomeArray[], AnotherArray[], decimal)>GetInvoiceDetailAsync(
    InvoiceHead invoiceHead) 
{ 
    ...
    return (x, y, z); 
}

Обратите внимание, что вы также можете добавить имена к этим элементам кортежа, например:

private async Task<(SomeArray[] x, AnotherArray[] y, decimal z)>GetInvoiceDetailAsync(
    InvoiceHead invoiceHead) 
{ 
    ... 
    return (x, y, z); 
}

И затем вы можете получить к ним доступ как к этим именам, а не Item1, Item2 и Item3.