public T Cvr<T>(object v)
{
   ....
}object value1 = 10;
object value2 = 10L;long v1 = Cvr<long>(value1); 
long v2 = Cvr<long>(value2); 请问该如何编写 Cvr 才能使得下面的调用正确?
注意:value1 和 value2 究竟具体是什么类型我不能确定

解决方案 »

  1.   

    Convert.ChangeType(object value,Type type)
      

  2.   

    public T Cvr<out T>(object v)
    {
       // 没啥好办法,我觉得你只能用 if 判断
       if (typeof(T) == typeof(int))
          return int.Parse(v);
       ...
       
       // 如果不想异常,那么用 TryParse
    }
      

  3.   

    #1 的确正解, 不过楼主这种尝试好像没什么意义, 个人以为...
    你在声明 value1 和 value2 的时候, 就必须知道接下来你要使用的 Cvr<T> 中的 T 是什么, 因为这种强制转换成功的比率很低. 就比如你那个 object value1 = 10;, 这种声明造成了后面代码有异常.
    既然你已经知道 T 是什么了, 又何必用函数, 直接 v2 = (long)value2; ...
    到头来, C# 和 C++ 一样, 也是没有彻底实现不定类型的返回值.
      

  4.   


    Type type = typeof(T); switch(type.Name){
    case "A":
    break;
    case "B":
    break;
    default
    }
      

  5.   


    知道 T,可不知道 value2,而且 value2 是被包装过的 
      

  6.   

    全都是没试过的
    说 return (T)value; 的,请你试试:
    object value1 = 10;
    long v1 = (long)value1;是否成功
      

  7.   

    System.Convert.ChangeType
    试试这个