c#中的(int)和convert.toint32之间的区别

时间:2010-06-17 04:55:21

标签: c# programming-languages

当我通过

将对象转换为int时
(int)object

然后当对象值为0时,他会给我一个特定演员无效的错误。

当我通过

将对象转换为int时
convert.toint32(object)

然后他工作并给我0意味着施法是有效的。

我想知道两者之间有什么区别。

1. (int)object
2.convert.toint32(object)

5 个答案:

答案 0 :(得分:12)

如果对象实际整数,则

(int) 。例如,(int) "12"会为您提供无效的强制转换异常。

Convert.ToInt32尝试将您提供的任何内容转换为整数。所以Convert.ToInt32("12")将返回12.确切地说,如果对象实现了IConvertible(System.String做了),那么Convert.ToInt32将调用IConvertible.ToInt32方法。

答案 1 :(得分:3)

两种方法都完全不同。第一个是 casting ,第二个是 conversion

Conversion值需要转换为int时,使用

non-integer

Casting 用于将实例unbox返回int,当实例已经是int的{​​{1}}类型的Object输入。

答案 2 :(得分:3)

在一般意义上,(Type)val可以表示:

  • 由语言定义的内置转换(例如,在float和int之间)
    • 可能需要实际操作(float< ===> int是一个很好的例子)
    • 或者可能仅仅是为了编译器(例如int< ===> an-int-enum)
  • 引用转换(从不更改引用或对象;它只是键入本地句柄)
    • 可能需要进行类型检查(例如,对象===> IDataReader)
    • 但可能已经知道是真的(例如,IDataReader ===> object)
  • 装箱/拆箱操作(总是初始化一个值类型,或者在堆上创建一个新对象[空载Nullable<T>除外]
  • 类型定义的转换运算符(隐式或显式),它运行类型
  • 中定义的任何代码

如果object值为(int)object,则int会假设它是取消装箱操作,因此仅当对象 时才会生效float(或盒装的枚举)。如果对象值实际上是一个字符串或一个盒装的Convert.ToInt32等等,它将会失败。

int.Parse的工作方式不同;它运行了许多测试,试图将诸如浮动(上面介绍)和解析字符串(映射到{{1}})之类的东西组合在一起。

答案 3 :(得分:2)

(int) something有两种情况可供使用:

  1. something 是一个装入对象的int,我们使用该调用将其取消装箱。如果将int放入ArrayList或HttpSession等中会发生这种情况......

  2. something 不是一个int,但它的类型可以显式转换为int,例如,内置类型的short,long,float,或实现显式强制转换操作符的类型。

  3. 另一方面,

    Convert.ToInt32只是调用something的类型IConvertible.ToInt32方法,它或多或少等同于int.Parse(something)

答案 4 :(得分:1)

有很多方法可以转换为int,很大程度上取决于你的来源。

要记住的最重要的事情是错误检查,这些方法都不是单独的傻瓜证明,因此您需要决定如何接近它们。

使用(int)转换,使用Convert.ToInt32()转换,使用int.Parse()进行解析都可以生成异常,例如InvalidCastException,FormatException和OverflowException,并且应该使用try / catch来处理失败的结果。

如果解析成功,则使用int.TryParse()解析将返回true / false结果,如果成功,则将值设置为函数调用中给出的out参数。

如果您真的想要获取任何对象并将其转换为int,那么最好使用Convert.ToInt32,例如:

public void TestFunction(object input)
  try {
    int value = Convert.ToInt32(input);
    SomeOtherFunction(value);
  }
  catch (Exception ex) {
    Console.WriteLine("Could not determine integer value");
  }
}

另一种可能性是依赖于在.ToString()中产生可用值的对象,例如:

public void TestFunction(object input)
  try {
    int value = int.Parse(input.ToString());
    SomeOtherFunction(value);
  }
  catch (Exception ex) {
    Console.WriteLine("Could not determine integer value");
  }
}
相关问题