どうやら C# ではリテラルもオブジェクトになっているみたいですね。 C++/CLI でも一応そうなっているようです。
Console::WriteLine( (1).GetType()); // > System::Int32
Console::WriteLine( (1.23).GetType()); // > System::Double
Console::WriteLine( (true).GetType()); // > System::Boolean
//Console::WriteLine( ("a").GetType()); // > error
文字列リテラルは駄目らしい。全ての型で対応しているような雰囲気だったのに。
C# だと文字列もいけます。
Console.WriteLine(1.GetType()); // > System::Int32
Console.WriteLine(1.23.GetType()); // > System::Double
Console.WriteLine(true.GetType()); // > System::Boolean
Console.WriteLine("a".GetType()); // > System::String