程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> Tuple補遺

Tuple補遺

編輯:關於C#

在我前面的文章利用.net泛型實現了一個Tuple.在這兩天的使用中發現還要再加點東 西才能好用.有三個地方:1Tuple要想Array,Enum,Delegate一樣有一個基類,這樣在不確定 Tuple類型參個數時可以用這個基類.2.要增加一個判斷函數,用來確定任意給定的一個對 象是否屬於Tuple中的類型(也許再加一個判定是否Tuple內的item的函數).3.增加默認構 造,這樣做是為了那些只要類型而無需具體對象的場合.

//只貼出Tuple<T1>和Tuple<T1, T2>的代碼,其他的自己加

public class Tuple
  ...{
    public Tuple() ...{}
    //具體判斷兩個類型是否一致
    protected bool JudgeType<T, V>(T t, V v)
    ...{
      return typeof(T).Equals(v.GetType());
    }
    //Tuple中是否有這種類型
    public virtual bool HasType<V>(V v)
    ...{
      return false;
    }
  };
  public class Tuple<T1> : Tuple
  ...{
    T1 _t1;
    public Tuple(T1 t1)
    ...{
      this._t1 = t1;
    }
    public Tuple() : this(default(T1)) ...{}
    public T1 Item_1
    ...{
      get...{return this._t1;}
    }
    public override bool HasType<V>(V v)
    ...{
      return base.HasType<V>(v) || this.JudgeType(this._t1, v);
    }
  };
  public class Tuple<T1, T2> : Tuple<T1>
  ...{
    T2 _t2;
    public Tuple(T1 t1, T2 t2) : base(t1)
    ...{
      this._t2 = t2;
    }
    public Tuple() : this(default(T1), default(T2)) ...{ }
    public T2 Item_2
    ...{
      get...{return this._t2;}
    }
    public override bool HasType<V>(V v)
    ...{
      return base.HasType<V>(v) || base.JudgeType(this._t2, v);
    }
  };

在這裡要說明一下protected bool JudgeType<T, V>(T t, V v) 函數,它非常簡單就是判斷兩個類型是否一致.不過要注意它的實現return typeof (T).Equals(v.GetType());其中T代表Tuple中的類型它使用typeof得到類型而v用GetType 得到類型.這是因為GetType拿到的是對象的真實類型,而typeof(T)是對象基類型.

class A1 ...{}
class A2 : A1 ...{}
Tuple<A2> t = new Tuple<A2>();
A1 a1 = new A2();
t.HasType(a1); //返回true

如果return typeof(T).Equals(typeof(V));會返回false,因為V被認成是A1而不是 A2.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved