很難得我會來寫 C# 的東東,雖然我工作就是寫 C# ,但我實在不是很喜歡寫後端的東西...

因為比起前端很無聊

但今天會來寫這個主要是因為專案上真的有好用到,有點相見恨晚的感覺

先附上MSDN:https://msdn.microsoft.com/zh-tw/library/system.tu...

MSDN 這東東有時候真的不知道他在寫三小,要用力看個範例才會了解

會用到的情境:

以往我們在寫C# or VB.net 如果要從函數或方法中傳回多個值的話

一般人可能會建一個 class 來把要傳出去的資訊包在一個 class 裡面返回

例如下面這樣:

先建一個跟書有關的 class

public class BookInfo {
public string BookNo { get; set; }
public string ISBN { get; set; }
public string BookName { get; set; }
}


然後可能有一個函數傳入了 bookno,要返回書籍資料

public BookInfo GetBookData(string bookno) {
// 可能做了很多事,然後返回一個塞滿資料的 BookInfo
return new BookInfo {
BookNo = "1234",
ISBN = "5678",
BookName = "我是書"
};
}


但是有的時候想要返回的參數裡面是跟書籍資料無關的

當然就不能放在 BookInfo 這個 Class 裡面一起返回啊

舉例來說:

我想要在取得書籍資料的同時, 一併返回用這本書及所查詢出來的總筆數

因為這個總筆數跟書籍資料沒太大關係,所以就不太適合建在 class 裡面了

雖然在 C# 中還有幾種做法可以做到 (out、ref) 但是用 Tuple 感覺是最快的了

廢話很多現在才開始是正題,因為怕前面 code 一貼完就直接結束了

使用方法:

public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var book = GetBookData("");
var bookName = book.Item1.BookName; //這樣用
var num = book.Item2; //這樣用
}
public Tuple<BookInfo,int> GetBookData(string bookno) {
//假設有10本
int total = 10;
//書籍資料在此
BookInfo bookinfo =  new BookInfo
BookNo = "1234",
ISBN = "5678",
BookName = "我是書"
};
//返回Tuple
return new Tuple<BookInfo, int>(bookinfo, total);            
}
}
public class BookInfo {
public string BookNo { get; set; }
public string ISBN { get; set; }
public string BookName { get; set; }
}


就依照上面的例子,返回 Tuple 之後用 Item1、Item2......去接就可以了 

看你傳出幾個參數就到 Item 幾

雖然很方便,但使用的時候要注意一下,因為傳出來的 Item1 誰會知道是什麼鬼東西

所以盡量不要傳出太多參數,而且必須要有註解說明比較好


以上,報告完畢!

arrow
arrow
    全站熱搜

    小雕 發表在 痞客邦 留言(0) 人氣()