.net泛型通用函数的特殊问题的解决方法(2)

  当然,微软类库中有一个Comparer静态类,已经实现了此接口可以直接进行比较(),因此我们也可以选择直接使用这个静态类中的Compare方法得到结果。

  【例2】实现一个通用的“+”——即如果传入的字符串,则自动按照字符串进行字符拼接;如果传入的是其它基本类型(int,double等),则返回相加结果。

  微软没有为“+”预定义接口,因此无法直接使用接口的方式来做(当然你自己强制定义一个,也可以如法炮制)。我们现在换一个方法——使用表达式树(C#代码如下):

复制代码 代码如下:


public static T Add<T>(T a, T b)
        {
            Expression left = Expression.Constant(a);
            Expression right = Expression.Constant(b);

Type t = typeof(T);

Expression value;

if (t == typeof(string))
            {
                value = Expression.Constant(a.ToString()+b.ToString());
            }
            else
            {
                value = Expression.Add(left, right);
            }

Expression<Func<T>> addExp = Expression.Lambda<Func<T>>(value);

Func<T> addFunc = addExp.Compile();

return addFunc();
        }


  动态判断T是string还是其它基本类型,然后调用不同的方法组合成为表达式树,动态编译成为一个Func表达式,返回结果即可。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjdwzg.html