Могу ли я объявить именованные асинхронные функции кортежа в C #? - PullRequest
0 голосов
/ 25 мая 2018

C # 7 позволяет нам объявлять функции, которые возвращают именованные кортежи, поэтому объявление, подобное показанному ниже, теперь нормально.

(int quotient, int remainder) = GetDivisionResults(17, 5);

Мне нужно обработать ответ от запроса HTTP-клиента и извлечьдва значения из него, и я хочу сделать это асинхронно.Допускается следующее

public static async Task<<Tuple<string,string>> GetRequiredReturnValuesFromResponse(string response)

Мой простой вопрос: можно ли назвать выходные строки так же, как я мог бы использовать функцию для синхронной работы вдоль строк, как показано ниже?

public static async Task<Tuple< string OrderNumber,string OriginalId>> GetRequiredReturnValuesFromResponse(string response)

1 Ответ

0 голосов
/ 25 мая 2018

Вы не можете назвать Tuple элементов - только ValueTuple элементов.Поддержка кортежей C # 7 основана на типе ValueTuple.Но даже тогда имена не являются частью самого ValueTuple ... они хранятся в атрибутах вместе с типом возвращаемого значения (или типом параметра).

Таким образом, вы можете определенно объявить это:

public static async Task<(string OrderNumber, string OriginalId)>
    GetRequiredReturnValuesFromResponse(string response)

Затем вы можете использовать:

var tuple = await GetRequiredReturnValuesFromResponse(response);
Console.WriteLine(tuple.OrderNumber);
Console.WriteLine(tuple.OriginalId);

Или даже:

var (number, id) = await GetRequiredReturnValuesFromResponse(response);

Но вы не можете назвать элементы, когда явно используете ValueTuple (если вы не укажетеявные атрибуты именования, которые, как мне кажется, компилятор предупреждает вас в любом случае) или вообще использование Tuple.

Лично я бы рекомендовал не добавлять типы ValueTuple в публичные API;Обычно я рассматриваю их как меру остановки для внутренней реализации, которую позже я мог бы решить перенести в более полностью инкапсулированный тип.Но это только личное мнение, и оно не отражает того, что вы можете делать.

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