none
多范型参数的函数如何定义? RRS feed

  • 问题

  • 由于C#不支持将List<子类> 自动识别为<父类>, 因此我想自己写一个函数进行转换。可结果发现了更大的麻烦。

    请各位高手帮我看看如何才能正确定义下面这个function吧. 感激不尽!!

      public static List<B> ListA2B<A,B>, A:B (List<A> _lstA, List<B> _lstB )
    
      {
    
       List<B> rstLst = new List<B>();
    
       foreach(A crrItem in _lstA)
    
       {
    
        rstLst.Add(crrItem);
    
       }
    
    
    
       return rstLst;
    
      }//ListA2B
    
    
    
    
    2010年12月28日 23:57

答案

  • public static List<TBase> AsList<TBase, TDerived>(this IList<TDerived> source)
        where TDerived : TBase, class
        where TBase : class
    {
        if (source == null)
        {
            throw new ArgumentNullException("source");
        }

        // 协变。
        IEnumerable<TBase> baseTypeInstance = (IEnumerable<TDerived>)source;
       
        return new List<TBase>(baseTypeInstance);
    }

    使用方法:

    class A { }
    class B : A { }

    List<B> bList = new List<B>();
    List<A> aList = bList.AsList<A>();

    试试看。:)


    Mark Zhou
    2010年12月30日 8:23

全部回复

  • static List<B> ConvertList<A, B>(List<A> lst)
            {
                if (lst == null) return null;
                return new List<B>((IEnumerable<B>)lst);
            }
    2010年12月29日 2:29
  • public static List<TBase> AsList<TBase, TDerived>(this IList<TDerived> source)
        where TDerived : TBase, class
        where TBase : class
    {
        if (source == null)
        {
            throw new ArgumentNullException("source");
        }

        // 协变。
        IEnumerable<TBase> baseTypeInstance = (IEnumerable<TDerived>)source;
       
        return new List<TBase>(baseTypeInstance);
    }

    使用方法:

    class A { }
    class B : A { }

    List<B> bList = new List<B>();
    List<A> aList = bList.AsList<A>();

    试试看。:)


    Mark Zhou
    2010年12月30日 8:23