C#返回T的问题

Ton*_*ony 0 c#

我有一个方法将数字从字符串转换为T,例如 int

public static T GetItemIdFromUrl<T>(string itemName)
{
   try
   {
      ...
      int ad_id = int.Parse(stringNumber);

      return (T)(object)ad_id;
   }
   catch 
   {
      return (T)(object)-1;
   }
}
Run Code Online (Sandbox Code Playgroud)

但结果我有一个十六进制代码0xffffffa5而不是91.为什么?

Jon*_*eet 5

好吧,很难知道为什么它在不知道输入字符串的情况下返回0xffffffa5,但是如果T不是任何一个int或者是具有底层基类型的枚举,那么你的代码将抛出异常int.例如,如果是T ,它将抛出double.你的方法并不是真正的通用 - 它试图返回的值总是一个int.为什么你的方法不仅仅被声明返回int?如果你想从转换int到一些其他类型的(double,long,等等)只是让这种转换可以在任务完成.代码中的拆箱转换将不起作用,除非Tint或适当的枚举(后者似乎不太可能).

需要注意的一点是,0xffffffa5是-91的位模式.你是否有可能只在调试器中看到了这个结果,结果是-91而不是91?