泛型方法返回值问题
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"……