列挙型の値をConsole.WriteLineに渡すのにキャストが必要?
プログラミングC# p36
サンプルはこんな感じ。
using System; class EnumeratedConstants { enum Temperatures { WickedCold = 0, FreezingPoint = 32, LightJacketWeather = 60, SwimmingWeather = 72, BoilingPoint = 212, } static void Main(String[] args) { Console.WriteLine("水の凝固点:{0}", (int)Temperatures.FreezingPoint); Console.WriteLine("水の沸点:{0}", (int)Temperatures.BoilingPoint); } }
結果はこうなります。
水の凝固点:32 水の沸点:212
本文には、こう書いてあります。
値を表示したい場合には、基となる型(int)にキャストする必要があります。
が、しかし、このキャストを取っ払っても、コンパイルエラーにもならず元気に動きます。
前者の場合、
IL_0008: box [mscorlib]System.Int32
のようになり、後者の場合、
IL_0008: box EnumeratedConstants/Temperatures
のようになります。
どっちにしてもbox化されるようですが、違いはよく分かりません。。