日期:2014-05-18  浏览次数:21156 次

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