我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019全年资料大全正版 > 泛型接口 >

C如何将类型Type作为泛型T的参数T传递

归档日期:05-24       文本归类:泛型接口      文章编辑:爱尚语录

  C#里,需要实现根据一个变量System.Typet,调用方法MethodT(),但是此时不知道如何根据t来填写这个T,请大家指导。知道里有人写过,但是感觉不靠谱。...

  C#里,需要实现根据一个变量System.Type t,调用方法MethodT(),但是此时不知道如何根据t来填写这个T,请大家指导。知道里有人写过,但是感觉不靠谱。

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  这是一个完整的泛型方法,限制符T:class表示了泛型T的类型限制,请在MSDN查找“泛型类型约束”词条

  如果仅需要传入类型T而不需要返回涉及T的值,完全可以使用 Method(Type t)来替代。

  应该注意的一点是,泛型方法存在的意义在于减少了非常多的冗余代码,它并不能消除或者自动处理如1楼中楼主所说的if/else逻辑(但是可以让你只写一次if/else而非几十上百次)。

  我不太确定你到底想问什么,如果只是要单纯的用法,下面给你一个我现写的例子,该例子涉及上述4个使用场景。虽然看起来有点复杂,但是完全理解后熟练应用泛型方法不成问题。

  我们的目标是:写一个方法,接收两个类型不定但继承自IEnumerable(可枚举接口)的参数,输出一个列表,其内是两个参数的每个元素比较大小后较大的元素的集合。例如,输入{1,3,4,5}和{2,2},应该输出{2,3,4,5}。

  现在我们分析一下,首先这个方法需要指出两个参数的类型,这里定为泛型类型T1和T2,这里的限定是IEnumerable,这样我们才可随意枚举这两个参数的元素。

  由于要比较元素大小而元素的类型不确定,所以还需要一个泛型类型指定两个参数中元素的类型,这里用泛型类型TElement。因为需要比较大小,这里加上限定IComparable,以防调用者送进来根本不能进行Compare的元素类型。

  方法内容我这里直接写上了,不用细看,基本思路就是逐一取出两个参数序列的元素进行比较填入新序列。唯一需要注意的是两个参数序列的长度未必相等。

  //如果compRslt的值不是我们一开始构造的默认值,说明比较有结果,存储

  这样能理解么?追问可以这么理解,但是这么写和if else没区别了,要把所有情况都考虑到。用泛型就是为了避免这种情况。追答他的 T 是个 object 类型,你用这个接口、方法的时候传一个类型过去,你传的什么他就是什么。

  应该是Helper类里面封装的一个方法,很久以前见过。我们的类型都是自己控制的还真没怎么用到过泛型。只有申明集合的时候才用到。这种用的时候始终都要传类型过去的 多个类型的时候 就用 parameter或者直接封装到Sql里面给他执行了,再用一次泛型还没必要的地步。

  C# 的泛型都是以类或方法后加尖括号来传:funType()

本文链接:http://buggystordera.com/fanxingjiekou/280.html