簡體   English   中英

我可以在C#中聲明命名的異步元組函數嗎?

[英]Can I declare named async tuple functions in C#?

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)

你不能命名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中; 我通常將它們視為內部實現的一種權宜之計,我可能會決定稍后遷移到更完全封裝的類型。 但這只是個人觀點,並不代表你能做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM