Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 取消装箱对象,该对象包含已知可分配给整型变量的值_C# - Fatal编程技术网

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

C# 取消装箱对象,该对象包含已知可分配给整型变量的值,c#,C#,如果我有一个对象实例,并且我知道它实际上是一个装箱整数,那么我可以简单地将它转换回int,如下所示: object o = GetSomethingByName("foo"); int i = (int)o; 然而,我并不知道这个值是整数。我只知道它可以分配给一个整数。例如,它可能是一个字节,在这种情况下,上面的代码将抛出InvalidCastException。相反,我必须这样做: object o = GetSomethingByName("foo"); int i = (int)(b

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

object o = GetSomethingByName("foo"); 
int i = (int)o;
然而,我并不知道这个值是整数。我只知道它可以分配给一个整数。例如,它可能是一个
字节
,在这种情况下,上面的代码将抛出
InvalidCastException
。相反,我必须这样做:

object o = GetSomethingByName("foo"); 
int i = (int)(byte)o;

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

简单地写下这个问题让我记住有一个
转换
类。这似乎有效:

int i = Convert.ToInt32(o);

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

有趣的是,看看
Convert.ToInt32
如何完成转换:

    public static int ToInt32(object value) 
    {
        return value == null? 0: ((IConvertible)value).ToInt32(null); 
    } 

诀窍是将对象强制转换为
IConvertible

,正如我所建议的:)不过您不需要强制转换为int;该方法已声明为返回int。谢谢,我删除了不必要的强制转换。@Lasse:这些对象实际上是由一个API的互操作层生成的,该API使用COM变量。API两侧现有的本机代码可以容忍不同类型的整数,因此我尝试匹配这种行为。这些变体还存储在字段中已有的文件中,因此无法轻松更改。