雖然Tuple 類別對其他語言來說不是新的東西,但對於C# 卻是一位新成員
雖然Tuple 類別對其他語言來說不是新的東西,但對於C# 卻是一位新成員,不過運作的觀念與其他語言大致相同
MSDN說法:Tuple 是一種資料結構,包含特定數目和順序的值,直接用個範例來看就知道了
static void Main() {
//人員姓名,身高,體重
Tuple<string, double, double> people = new Tuple<string, double, double>("小叮噹", 100, 80);
Console.WriteLine("我的名字是 {0}, 身高 : {1} cm, 體重: {2} kg", people.Item1, people.Item2, people.Item3);
Console.Read();
}結果
其中people的Item1, Item2....,依序代表Tuple 的中存放的值
不過對於Tuple比較常在一個Function 要回傳多個資訊,以往的作法可能是設定 ref 或是out 的參數,不然就是回傳個特定class,例如下面範例是判斷一個人的BMI直過小於25,就算健康,且提供message
static bool IsHealthy(double height, double weight, out string message) {
double bmi = weight / Math.Pow(height / 100, 2);
if (bmi < 25) {
message = "標準身材";
return true;
} else {
message = "該減肥了";
return false;
}
}如今可已改成
static Tuple<bool, string> IsHealthy2(double height, double weight) {
double bmi = weight / Math.Pow(height / 100, 2);
Tuple<bool, string> t;
if (bmi < 25) {
t = Tuple.Create<bool, string>(true, "標準身材");
} else {
t = Tuple.Create<bool, string>(false, "該減肥了");
}
return t;
}
這麼做就不需要out 或ref 的參數,也不需要建立一個class來回傳多個資訊,但缺點是語意的不明,畢竟 用Item1, Item2, Item3.....,是容易讓人搞不清楚,尤其是日後review這些code 時。
另外Tuple 也可以達到KeyValuePair的效果,需注意的是,Tuple 的Property 是唯讀的(Item1, Item2......),一旦建立之後就不可修改
