【问题标题】:C# datatype coercion in static size静态大小的 C# 数据类型强制
【发布时间】:2015-11-18 23:49:36
【问题描述】:

所以如果我定义一些常量

const byte MAX_SIZE = 100;

然后用上面的静态大小实例化一个整数数组

int[] myArr = new int[MAX_SIZE];

静态大小是显式强制还是完全可以接受的。

只是好奇,因为我在 VS Visual C# 2013 中没有收到任何警告,或者有什么方法可以让警告更加严格?

【问题讨论】:

  • 它是 const 所以编译器在编译时用它的值替换每个 MAX_SIZE。
  • 所以不存在强制,byte->int
  • 你认为这里被胁迫的究竟是什么?
  • 我想知道 [(byte)100] 是否被强制转换为 [(int)100]
  • 这是 const 声明 .field private static literal uint8 MAX_SIZE = uint8(100)IL,所以是的,编译器会将 (byte)100 转换为 (int)100

标签: c# coercion


【解决方案1】:

值将被隐式转换为int。请参阅 c# 规范。

7.6.10.4 数组创建表达式

...新的非数组类型 [ 表达式列表 ] ...

表达式列表中的每个表达式都必须是 int、uint、long 或 ulong 类型,或者可以隐式转换为这些类型中的一种或多种。

... 在对每个表达式求值之后,执行到以下类型之一的隐式转换(第 6.1 节):int、uint、long、ulong。选择此列表中存在隐式转换的第一个类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2014-02-03
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多