我可以在C#中声明命名的异步元组函数吗?

时间:2018-05-25 06:40:25

标签: c# asynchronous tuples

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 :(得分:8)

您无法命名if sc "program" = active do this 个元素 - 仅Tuple元素。 C#7元组支持基于ValueTuple类型。但即便如此,这些名称也不是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类型放在 public API中;我通常将它们视为内部实现的一种权宜之计,我可能会决定稍后迁移到更完全封装的类型。但这仅仅是个人意见,并不代表你做什么。