在C#里使用泛型,调用一个函数时,怎么转化泛型数组?

比如我有一个函数fun1:voidfun1<T>(T[]a,intb){fun2(a);}调用了另一个函数fun2,其中,fun2有几个重载,如下:voidfun2(by... 比如我有一个函数fun1:
void fun1<T> (T[]a, int b)
{
fun2(a);
}
调用了另一个函数fun2,
其中,fun2有几个重载,如下:
void fun2(byte[] x);
void fun2(int[] x);
void fun2(double[] x);

在实际的代码中,这样做会出现泛型T[]无法转化为相应类型数组的问题.这要怎么处理?
那个fun2具体的是指系统类库里面的一个函数,已经没办法改的.因为不同的类型有不同的处理,主要是类型的长度问题.

回1楼.fun1里只是调用到了这个方法,我可不想只是因为一行代码的不同调用而写三个版本的fun1

回baitaotaobee:如果是那样子的话,我就得重载3个fun1了。fun1里的代码比较多,这样分开了不方便维护。。如果是用两个泛型的话,重载就太多了。。。
我是想,在调用Fun2时,有必要的话,进行一下转换,然后再调用相应的fun2,但主要的问题是我不知道在这里要怎么转换,直接强制转换编译过不了.

如果是使用Object类型,是否可行?我在这个函数里主要是涉及到数组的长度和其所占用的空间,然后调用不同类型的fun2
展开
 我来答
草薙在
2010-07-15 · TA获得超过4795个赞
知道大有可为答主
回答量:6187
采纳率:50%
帮助的人:6313万
展开全部
很奇怪o,你这样搞,func2提供的重载还不够你用么?

补充:
你说了分开不方便维护就说明你这三个重载的代码可重用的部分不多,所以根本不可能完全写成一个方法,还是老老实实维护三个方法吧,除非你想出一个什么好点儿的方案找出公共的部分就容易抽象了

其实关键是像int这种基本类型泛型是没法约束的,而且泛型不是简单的作为重载用的,你要理解泛型的用处和用法才可以

补充2:
用Object有装箱拆箱的性能问题
depluin
2010-07-13 · TA获得超过3179个赞
知道大有可为答主
回答量:3378
采纳率:75%
帮助的人:2486万
展开全部
你的fun2也要是泛型方法啊
fun2<T>(T[] x)

还有指定类型的fun2<double>(double[] x)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
swalp
2010-07-13 · 超过12用户采纳过TA的回答
知道答主
回答量:122
采纳率:0%
帮助的人:66.7万
展开全部
fun2也是泛型方法就好了,返回一个泛型就OK了啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
baitaotaobee
2010-07-13 · 超过22用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:61.2万
展开全部
无法转化 应为T是一个泛型有可能是任意类型的 可能是无法转化成int的类型 这样写就无法通过编译 不知道你是什么意思 如果要想通过不同参数来实现fun2的重载的话 完全可以直接调用 fun2(int[] intArray) 或者 fun2(byte[] byteArray)

为何要通过一个泛型 和fun1函数和泛型T呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hongxiafang
2010-07-16 · TA获得超过391个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:84.3万
展开全部
void fun2(Array a)
{

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式