代码之家  ›  专栏  ›  技术社区  ›  Gage

何时使用强制转换或转换

  •  74
  • Gage  · 技术社区  · 16 年前

    我很想知道演员和演员之间有什么区别 int 与使用 Convert.ToInt32() . 使用它是否会提高性能?

    另外,每种情况应该用于哪些情况?目前我更倾向于使用 Convert 但我没有理由走这两条路。在我的脑海里,我看到他们两个都实现了同一个目标。

    9 回复  |  直到 5 年前
        1
  •  39
  •   Sergio    9 年前

    看到了吗 Diff Between Cast and Convert 在另一个论坛上

    这个 Convert.ToInt32(String, IFormatProvider) Int32.Parse (阅读备注)。
    所以唯一的区别是,如果传递空字符串,它将返回 0 Int32.解析 ArgumentNullException .

    就我个人而言,我两者都不使用,而且倾向于使用 TryParse 功能(例如。 System.Int32.TryParse()


    更新

    顶部的链接已断开,请参阅 this answer 在StackOverflow上。

        2
  •  78
  •   Greg    16 年前

    当它真的是一种 int ,当它不是 但你想让它变成一个。

    例如 int i = (int)o; 当你知道o是一个int

    int i = Convert.ToInt32("123")

        3
  •  12
  •   Seb    11 年前

    还有另一个区别。 “Convert”总是处于溢出选中状态,而“cast”可能处于溢出选中状态,具体取决于您的设置和使用的“checked”或“unchecked”关键字。

    更明确地说。 考虑代码:

    int source = 260;
    byte destination = (byte)source;
    

    但是:

    int source = 260;
    byte destination = Convert.ToByte(source);
    

        4
  •  6
  •   bjan    12 年前

    并非所有类型都支持转换,例如

    int i = 0;
    decimal d = (decimal)i;
    

    因为需要实施 explicit operator . 但是.NET还提供 IConvertible interface

        5
  •  4
  •   fire.eagle    16 年前

    强制转换只是告诉编译器这个对象实际上是一个不同类型的实现,并将其视为新的实现。然而,convert表示这并不是从您试图转换到的内容中继承的,但是有一种固定的方法可以这样做。例如,假设我们将“16”转换为int。“16”是一个字符串,并且不以任何方式从int继承。但是,很明显“16”可以变成int 16。

        6
  •  2
  •   Gerard ONeill    12 年前

    再加上我的2c——看来概念上的区别可能有用。我不是专家..:

    铸造正在改变代表类型。所以“32”和32L以及32.0f之间的转换似乎是合理的。c#不会自动支持“32”,但大多数动态语言会支持。所以我将使用(长)“32”或(字符串)32L。当我可以的时候。我还有另一条规则——施法应该是圆形的,可折叠的。

    转换不必是可折叠的,而且可以简单地创建一个全新的对象。

    另一个可以区分的是,只对“IsA”使用casting,而不是对“makeLookLikeA”使用casting。因此,如果您知道字符串来自数据库,但在非官方模式中实际上是int,可以随意使用cast(尽管在本例中,c#希望您使用Convert)。浮子也是如此。但不适用于仅使用强制转换来截断浮点值的情况。这种区别也解释了向下和向上转换的原因——对象总是'IsA',但是类型可能已经被泛化为一个列表。

        7
  •  1
  •   Yuriy Faktorovich    16 年前

    有很多的超载 Convert.ToInt32 比如一个字符串。当试图将字符串转换为int时,将抛出编译错误。关键是它们有不同的用途。当您不确定要从哪个类型强制转换对象时,“转换”特别有用。

        8
  •  0
  •   MashiMaro    10 年前

    例如:

    float a = 1.3f;
    float b = 0.02f;
    int c = (int)(a / b);
    int d = Convert.ToInt32(a / b);`
    

    结果是c=64和d=65

        9
  •  0
  •   Tyler Heers    10 年前

    string number=“123abc”;

    整数;

    转换为32(数字);//此调用引发异常