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