1

byte的MSDN 页面说您可以像这样声明一个字节:

byte myByte = 255;

然后

在前面的声明中,整数文字 255 隐式地从 int 转换为 byte。如果整型字面量超出字节范围,则会发生编译错误。

所以我很难理解为什么下面给我一个编译错误'不能隐式地将类型'int'转换为'byte')

byte value = on ? 1 : 0; // on is defined as a bool earlier

我在 VS 2012 上将其编译为 Windows Store App 项目,如果这有什么不同的话。

4

1 回答 1

7

因为这:

on ? 1 : 0

不是整数文字。它是一个返回整数的表达式。此外,直到运行时才能评估此表达式。

当有文字时,编译器可以在编译时评估它并确保它满足任何范围要求 - 正如页面所说,如果值超出范围,则由编译器产生错误。

从您的同一页面

您不能将较大存储大小的非文字数字类型隐式转换为字节。


根据@Jeppe Stig Nielsen 的评论 - 如果值是常量(它不必是第一页所说的文字),它也可以工作。C# 规范说:

6.1.9 隐式常量表达式转换

隐式常量表达式转换允许以下转换:

  • 类型的常量表达式(第 7.19 节)int可以转换为 type sbyte, byte, short, ushort, uint, or ulong,前提是常量表达式的值在目标类型的范围内。

  • type 的常量表达式long可以转换为 type ulong,前提是常量表达式的值不是负数。

于 2012-09-11T14:09:32.013 回答