C#:值类型可以转泛型吗
C#问题:函数是这样定义的:publicboolread(stringname,outT[]data),其中T是泛型,我想将整型或浮点型数据给泛型T的数组,请问可以吗?如...
C#问题:函数是这样定义的:public bool read(string name,out T[] data),其中T是泛型,我想将整型或浮点型数据给泛型T的数组,请问可以吗?如果可以程序应该怎么写?
展开
4个回答
展开全部
可以把int, float这样的基本数据类型传给泛型数组,因为值类型也继承于Object类。上面的函数可以这样调用:
int[] arr=new int[]{1,2,3};
string name=null;
read(name, out arr);
int[] arr=new int[]{1,2,3};
string name=null;
read(name, out arr);
更多追问追答
追问
嗯……我觉得我好像没说清楚。
public bool read(string name,out T[] data)
{在其中,我想将一个整形或者其他类型的数组附给这个泛型数组
类似于data=new T[i];
int []a=.........;
for(...........)
data[i]=a[i];
}
调用时是data.read("名字.txt",out a);
但是在将整形数组附给泛型数组时,总会报错“无法将类型int转换为T“,我想请问这样有什么解决办法吗?
追答
因为T是一个未知的类型,执行data[i]=a[i]这里肯定会出错,如果你在read方法中确定要让data数组保存int类型,就不应该把data定义成泛型类型。按照你上面的代码,read方法返回的data数组只能是int数组,所以把data定义成泛型已经没有意义了。如果你的函数的目的是想返回一个类型不确定的数组,例如你的代码可能是这样:
data=new T[i];
if(需要int数组){
int []a=new int[3];
for(............)
data[i]=a[i];
}
if(需要string数组){
string []a=new string[3];
for(............)
data[i]=a[i];
}
if(....)
........
那你可以把函数定义成 public bool read(string name, out object[] data)。
总之,泛型是在类型不确定的情况下用的,并且具有泛型类型参数的方法体内只应该使用泛型参数的类型,不应该随便把一个确定的类型给泛型类型赋值,除非你指定了某种泛型类型的约束,使得赋值操作可以借助类型转换得以完成。
展开全部
只要自己写转型方法都是可以的转的
问题是如果是一个整数值 int i = 1;
你要把1转成什么
问题是如果是一个整数值 int i = 1;
你要把1转成什么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
学习
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
围观
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询