首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

泛型方法返回值有关问题

2012-05-16 
泛型方法返回值问题static void Main(string[] args){Saystring(abc)}public static T SayT(string

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

热点排行