字符串插值输出枚举名称而不是值

Jac*_*hor 7 vb.net enums string-interpolation

我希望有人可以解释有关字符串插值和枚举类型的默认功能.

我有这个枚举:

public enum CommentType
{
    MyComment = 24,
    TheirComment = 25,
    AnotherComment = 26
}
Run Code Online (Sandbox Code Playgroud)

我在字符串中使用它:

Dim sDateModified As String 
sDateModified = $"<div name='commenttype{CommentType.MyComment}'></div>"
Run Code Online (Sandbox Code Playgroud)

我期待CommentType.MyComment被评估并使用int值24.结果应该是:<div name='commenttype24'></div>

但实际发生的是使用标识符,让我: <div name='commenttypeMyComment'></div>

为了获得枚举值,我必须将其转换为整数:

sDateModified = $"<div name='commenttype{Convert.ToInt32(CommentType.MyComment)}'></div>"
Run Code Online (Sandbox Code Playgroud)

它只是让我觉得反直觉.有人可以解释或指出有关它为何如此工作的文档吗?

The*_*man 11

您只需在插值中使用格式字符串即可将结果强制为整数格式。

Dim sDateModified As String 
sDateModified = $"<div name='commenttype{CommentType.MyComment:D}'></div>"
Run Code Online (Sandbox Code Playgroud)


Nat*_*ini 10

你得到的是字符串值,MyComment因为这是返回的:

CommentType.MyComment.ToString()
Run Code Online (Sandbox Code Playgroud)

方法喜欢String.FormatConsole.WriteLine 会自动调用 ToString()任何东西,是不是已经是一个字符串.字符串插值语法$""只是语法糖String.Format,这就是字符串插值也以这种方式运行的原因.

您的解决方法是正确的.对于更紧凑的代码,您可以:

CInt(CommentType.MyComment)
Run Code Online (Sandbox Code Playgroud)