在 D 中打印枚举字符串值(不是键)

Printing the enum string values (not keys) in D

我在此代码中打印 "F" 而不是 "Fahrenheit"。如何打印枚举值而不是键?

import std.stdio;

void main()
{
    enum TemperatureUnit : string { C = "Celsius", F = "Fahrenheit" }
    writefln("%s", TemperatureUnit.F);
}

只需将其转换为字符串:

writefln("%s", cast(string) TemperatureUnit.F);

请注意,将其分配给字符串时不需要此转换:

string s = TemperatureUnit.F; // just works

它只在这里发挥作用,因为 std.stdio.write* 系列函数以及 std.conv.to,查看传递给它的确切类型并尝试专注于它。当它是 enum Color { red, green, blue } 时,打印出名字是有用的。但是当该值也是可打印字符串时,这种行为就不那么有用了。强制转换告诉您希望将其视为普通字符串而不是枚举的函数。