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