【问题标题】:Why can't I explicitly cast some data types like string to int, byte, float, etc? C#为什么我不能将某些数据类型(如字符串)显式转换为 int、byte、float 等? C#
【发布时间】:2012-06-05 13:57:30
【问题描述】:

我知道不可能将stringbool 转换为(int)MyString (short)MyBool 等等,而允许将int 转换为short

很遗憾,我找不到解释,为什么。所以我在这里问。

为什么不允许显式转换某些数据类型(我不是在问如何将字符串转换为其他类型或类似的东西)?

【问题讨论】:

  • 因为它们包含不同类型的数据?它还与具有严格类型安全规则的 C# 等语言有关。
  • 出于显而易见的原因“您如何将string 定义为int?”。
  • @ColeJohnson 首先,只是想知道为什么。其次,我认为如果我可以显式地转换每种数据类型,它会更具可读性。
  • @PLB:这正是我们在 BASIC 等语言中走出的噩梦。你想回到那个?
  • "(我不是在问如何将字符串转换为其他类型或类似的东西)" 但是您的示例是将字符串转换为 int 之一...?

标签: c# casting


【解决方案1】:

参考:Casting and Type Conversions (C# Programming Guide)

显式转换(强制转换):显式转换需要强制转换 操作员。当信息可能在 转换,或者当其他转换可能不成功时 原因。典型示例包括将数值转换为 具有较低的精度或较小的范围,以及基类的转换 派生类的实例。

发件人:Explicit Conversion

某些编译器需要显式转换以支持缩小范围 转换。它是一种特定于语言的转换方式。在 某些语言,如 C# 和 C++,会执行显式转换 使用铸造。当您在转换前加上数据时会发生强制转换 type 定义要执行的转换的类型。在 Visual Basic,CType 函数用于允许显式转换 隐式不允许的数据类型。

【讨论】:

    【解决方案2】:

    这是语言设计者为强制程序员选择如何进行转换而做出的决定。

    将此字符串视为 int:"4.99999999999999999999999999999999999999999999999999999999"。 Int32 的答案应该是什么? 45?

    考虑这个字符串到日期的转换:"5/8/12"。在美国,这将是 May 8th,而在英国,它将是 August 5th

    • Implicit casts 存在于不会损失精度的地方。

    • Explicit casts 存在于可以安全转换的地方(没有误解数据的风险),但可能会丢失一些精确信息。

    • 其余情况存在转换,例如字符串到int、bool、日期等。

    【讨论】:

    • 但是,如果该值超出“cast-to”类型的约束,则可能会抛出一个 execption
    • 不幸的是,Java 为其浮点类型选择了后向规则,.net 也效仿。从doublefloat 的转换应该扩大,因为对于每个double,都有一个float 值,它要么是明确正确的表示,要么是在明确正确表示的千亿分之一范围内.相比之下,对于几乎任何非 NAN float 值,它可以表示数百万个 double 值。甚至 (float)INF 也可以表示 (double)1E+39、6E+100 或除 (double)+INF 之外的数十亿个其他值。
    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多