2013年6月17日 星期一

Tuple in .NET

  • Tuple是一個資料結構,含有序的項目,順序由建立Tuple時決定
  • Tuple文件 http://msdn.microsoft.com/en-us/library/system.tuple.aspx
  • Tuple中的項目(Item)型別(Type)可以不同
  • 固定大小,無法新增、移除項目
  • .NET Framework 4始支援
  • 從functional programming引進而來
  • Tuple中的項目(Item)都是唯讀的(Readonly)
  • 缺點,程式不易讀,Tuple中的項目會自動命為Item1、Item2….無法知道到底存什麼
  • 用於
    • 表示一組資料,如資料庫記錄
    • 從method回傳多個值,不需使用out參數
    • 使用一個參數傳遞多個值到method

Demo1

可以使用建構函式來建立,語法煩瑣,可以使用Tuple.Create方法建立,利用ItemX取出值。

private static void demo1( ) {
      var n = new Tuple<int , int >( 10 , 20 );
      //會自動根據定義產生Item1、Item2屬性
      Console.WriteLine( n.Item1 );
      Console.WriteLine( n.Item2 );
      //較簡單
      var n2 = Tuple.Create<int , int>( 10 , 20 );
      Console.WriteLine( n2.Item1 );
      Console.WriteLine( n2.Item2 );
    }

Demo2

可以當參數傳入mymethod

private static void demo2( ) {
    //當參數傳入mymethod
    var n = new Tuple<int , int>( 10 , 20 );
    Console.WriteLine( mymethod(n ) );
  }
  private static int mymethod(Tuple<int , int > t ) {
    return t.Item1 + t.Item2;
  }

Demo3

可以當作方法回傳值

private static void demo3( ) {
      Console.WriteLine( mymethod2( ).Item1 );
      Console.WriteLine( mymethod2( ).Item2);
    }

    private static Tuple<int , string> mymethod2( ) {
      return Tuple.Create<int,string>(1,"mary");
    }

Demo4

可以建立1~7個項目 tuple,超過8個以上可以使用Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>物件的來建立,再透過Rest屬性存取TRest中項目的值。定義8個項目:

private static void demo4( ) {

var t8 = new Tuple<int , int , int , int , int , int , int , Tuple<int>>( 1 , 2 , 3 , 4 , 5 , 6 , 7 , Tuple.Create(8) );

Console.WriteLine( t8.Rest.Item1); //8

}

Demo5

定義9個項目:

private static void demo5( ) {
      var t9 = new Tuple<int , int , int , int , int , int , int , Tuple<int , int>>( 1 , 2 , 3 , 4 , 5 , 6 , 7 ,
        new Tuple<int,int>(8,9)
        );
      Console.WriteLine( t9.Rest.Item1);  //8
      Console.WriteLine( t9.Rest.Item2 ); //9
    }

沒有留言:

總瀏覽量