自從使用了Tuple,再也不out了

介紹

Tuple的中文名:元組

Tuple的作用:

存儲一組數據

可以使方法返回多個值,而不用out參數

 

在.NET Framework,4.7以前版本的元組叫Tuple,而4.7版本以後又引入一個元組叫ValueTuple

而在.NET Core中Tuple在1.0版本就存在,而在2.0引入了ValueTuple

 

如果在.NET Framework 4.7以前版本或.NET Core2.0以前版本要使用ValueTuple,可以通過NuGet安裝System.ValueTuple

 

Tuple是C#4.0時出的新功能,而ValueTuple是C#7.0出的功能

Tuple與ValueTuple的基本區別就是,Tuple是類class,而ValueTuple是結構struct

ValueTuple的功能比Tuple強大

 

下面看看Tuple與ValueTuple的基本用法

 

用法

 

Tuple

 

創建元組

//通過構造函數來創建
var a = new Tuple<int, string>(1001, "Jack");

//通過靜態方法Create來創建
var b = Tuple.Create(1002, "Tom");

 

Tuple最多可以創建8個元素,當然可以在元素中在定義Tuple

 

訪問元組數據

可以通過Item1,Item2訪問元組數據

 

//訪問數據
var id =  a.Item1;
var name = a.Item2;

 

元組作爲方法的返回值

public Tuple<int, string> GetUserInfo()
{
    return Tuple.Create(1001, "Jack");
}

接收數據

var user = GetUserInfo();

 

Tuple的功能較弱

1.元素只能讀取,不能修改

2.只能通過Item1的形式訪問元素,不能定義元素的名稱

 

下面看看ValueTuple的用法,ValueTuple將解決上面Tuple的問題

 

ValueTuple

 

創建元組

有像上面Tuple類似的創建方法

var b = new ValueTuple<int, string>(1001, "Jack");
var d = ValueTuple.Create(1002, "Tom");

也可以通過 ( , ) 來創建,使代碼更簡潔

ValueTuple<int,string> userInfo1 = (1003, "Mark");
(int, string) userInfo2 = (1003, "Mark");
var userInfo3 = (1003, "Mark");

 

定義時給元素起個名

var userInfo1 = (id: 1003, name: "Mark");

(int id, string name) userInfo2 = (1003, "Mark");

訪問元組數據

也是通過Item1,Item2訪問元組數據

ValueTuple有一個好處就是可以定義元素的名稱,起一個有意義的名稱

 (int id, string name) userInfo = (1003, "Mark");

這樣可以通過id和name訪問數據了

 

ValueTuple不僅可以訪問數據,還可以修改數據,即可讀寫

(int id, string name) userInfo = (1003, "Mark");
userInfo.id = 1010;
userInfo.name = "haha"; 

 

元組作爲方法的返回值

可以這樣

public ValueTuple<int, string> GetUserInfo()
{
    return ValueTuple.Create(1003, "Mark");
}

也可以簡寫

public (int, string) GetUserInfo2()
{
    return (1003, "Mark");
}

接收數據

可以通過定義元組接收

 (int, string) userInfo2 = GetUserInfo2();

也可以通過var接收

var userInfo3 = GetUserInfo2();

當然可以通過定義元組並定義元素名稱,方便訪問數據

(int id, string name) userInfo4 = GetUserInfo2();

var uid = userInfo4.id;
var uname = userInfo4.name;

這也可以在方法的返回值中定義元素名稱

public (int id, string name) GetUserInfo2()
{
    return (1003, "Mark");
}

定義兩個變量接收數據

(int id, string name)  = GetUserInfo2();

var uid = id;
var uname = name;

這種與上面的定義不同,這裏定義的是兩個變量

//定義一個ValueTuple
(int id, string name) userInfo1 = (1003, "Mark");

var uid = userInfo1.id;
var uname = userInfo1.name;

//定義兩個變量
(int id, string name) = (1003, "Mark");

var uid2 = id;
var uname2 = name;

 

元組兼容性問題

元組的兼容性就是指元組的元素類型和順序相同,名稱不同無所謂

 

總結

可以說Tuple有的功能,ValueTuple都有,所以一般用ValueTuple​

ValueTuple使用 ( , ) 方式,使代碼更簡潔

ValueTuple既能讀,又能寫,比Tuple更實用

ValueTuple支持元素命名,方便使用

ValueTuple能作爲方法的返回值,一次返回多個值,不用重新定義類作爲參數或使用out參數

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章