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)
答案 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中;我通常将它们视为内部实现的一种权宜之计,我可能会决定稍后迁移到更完全封装的类型。但这仅仅是个人意见,并不代表你能做什么。