取消装箱对象,包含已知可分配给整数变量的值

Wim*_*nen 4 c#

如果我有一个object实例,我知道它实际上是一个盒装整数,那么我可以简单地将它转换回int,如下所示:

object o = GetSomethingByName("foo"); 
int i = (int)o;
Run Code Online (Sandbox Code Playgroud)

但是,我实际上并不知道该值是整数.我只知道它可以分配给一个整数.例如,它可能是a byte,上面的代码会抛出InvalidCastException这种情况.相反,我必须这样做:

object o = GetSomethingByName("foo"); 
int i = (int)(byte)o;
Run Code Online (Sandbox Code Playgroud)

该值也可以是a short或其他可以分配给的值int.如何概括我的代码来处理所有这些情况(不单独处理每种可能性)?

Wim*_*nen 5

简单地写这个问题让我记得有一Convert堂课.这似乎有效:

int i = Convert.ToInt32(o);
Run Code Online (Sandbox Code Playgroud)

编辑:但不幸的是,它也会进行我实际上不需要的类型转换,比如解析字符串.