C# 元組析構(gòu)
元組對(duì)于從一個(gè)函數(shù)中返回多個(gè)結(jié)果非常有用。對(duì)于沒有必要使用更復(fù)雜的對(duì)象,如類、結(jié)構(gòu)或數(shù)組這類情況,使用元組就非常有效。下面是一個(gè)有關(guān)元組的簡單示例:
var numbers = (1, 2, 3, A, 5);
該示例定義了一個(gè)返回多個(gè)結(jié)果的函數(shù):
private static (int max, int min, double average)
GetMaxMin (IEnumerable<int> numbers) {...}
通過代碼調(diào)用GetMaxMin()函數(shù)時(shí),返回的結(jié)果必須由代碼解析后才能顯示。如果可以實(shí)現(xiàn)元組析構(gòu)(tuple deconstruction),就沒有必要編寫解析結(jié)果的代碼-要實(shí)現(xiàn)元組析構(gòu),只需要給支持該特性的任何類添加Deconstruct()函數(shù)即可,如下面的類所示:
public class Location
{
public Location(double latitude, double longitude)
=> (Latitude, Longitude) = (latitude, longitude);
public double Latitude { get; }
public double Longitude { get; }
public void Deconstruct(out double latitude, out double longitude)
=> (latitude, longitude) = (Latitude, Longitude);
}
Location類實(shí)現(xiàn)了一個(gè)表達(dá)式體(expression-bodied)構(gòu)造器,它接受類型為double的兩個(gè)變量(latitude和longitude),用于設(shè)置屬性 Latitude 和 Longitude 的值。DeconstructO函數(shù)有兩個(gè)out參數(shù): out double latitude 和 out double longitudeo表達(dá)式將這兩個(gè)out參數(shù)的值分別設(shè)置為初始化Location類時(shí)Latitude和Longitude屬性的填充值??赏ㄟ^將元組賦給Location的方法來訪問這兩個(gè)字段:
var location = new Location(48.137154, 11.576124);
(double latitude, double longitude) = location;
之后,就可以直接引用結(jié)果而不必對(duì)結(jié)果進(jìn)行解析.
點(diǎn)擊加載更多評(píng)論>>