2010-10-14 89 views
0

我知道console.foregroundColor需要一个ConsoleColor枚举作为参数。我没有得到的是为什么 - 我猜这些是字符串,所以当console.foreground接收它作为参数时,它将使用基于这些常量的某种开关。这样对吗?还是有我错过的东西?ConsoleColor枚举问题

回答

1

Enum具有整数值,实际的ConsoleColor值为0,1,2,3等等。此外,由于leppie指出实际映射到本机颜色值的ConsoleColor值。在控制台的本机颜色值中 - 前景值将进入较低的四位,而背景值进入高四位。枚举提供易用性,因此框架库已将控制台颜色包装为枚举。

+0

我不明白你的意思是什么“映射到本土的颜色”。如果每个元素都有其整数类型(类似索引?),那么映射是什么? – Ptr 2010-10-14 09:11:17

+0

例如,ConsolColor.DarkBlue的值为1,常量(在Windows API中)FOREGROUND_BLUE的对应值也是1.请参阅http://msdn.microsoft.com/en-us/library/ms682093(VS.85)。 aspx和http://msdn.microsoft.com/en-us/library/ms682088(v=VS.85).aspx#_win32_character_attributes来了解这里涉及的win api结构。 – VinayC 2010-10-14 10:19:27

2

控制台仅支持16种颜色。我只能假设枚举直接映射到本地常量,因此它不需要开关。

+0

是的,但如果它可能需要字符串(如“黑色”)作为参数,它会是相同的,对吧?我的意思是,如果枚举只包含元素列表,那么console.foreground必须以某种方式区分,这意味着什么。 – Ptr 2010-10-14 09:08:07

+0

@Ptr,看我的答案。正如leppie所指出的,由于实际枚举值映射到本地常量,因此不需要switch语句。枚举是一种类型安全的命名整型常量。 – VinayC 2010-10-14 09:08:23