读书人

泛型方法返回值有关问题

发布时间: 2012-05-16 23:40:10 作者: rapoo

泛型方法返回值问题
static void Main(string[] args)
{
Say<string>("abc");
}


public static T Say<T>(string str)
{
T t1 = default(T);
t1 = (T)str;
return t1;
}

为什么一直报无法从string类型转换为T呢?
如果一个泛型方法的返回值就是T本身 而且在方法内部对传进来的参数进行操作然后返回 怎么写呢?

[解决办法]
如果你一定要转,那么请先转成object 再转

public static T Say<T>(string str)
{
T t1 = default(T);
t1 = (T)((object)str);
return t1;
}


[解决办法]
t1 = (T)str;
这一句,你当然无法保证str能转换成功,
T如果是int呢

这函数逻辑就不对
[解决办法]
public static T Say<T>(string str)
{
return (T)Convert.ChangeType(str,typeof(T));
}
[解决办法]
这样写,如果T是int,应该不会报错,Convert.ChangeType相当于Convert.ToInt32,如果str的值不是整数可能抛异常或者返回0,

但如果T是引用:
因为T类型不确定,所以不能直接用(T)转换类型,.Net不能确定T是什么,也无法确定string是否能转换为T,这样转换肯定会报错,

用Convert.ChangeType试试看:

static void Main(string[] args)
{
Say<string>("abc"……

读书人网 >C#

热点推荐