Tuple补遗

  在我前面的文章利用.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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值