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

时间:2018-01-10 19:31:17

标签: vb.net enums string-interpolation

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

我有这个枚举:

public enum CommentType
{
    MyComment = 24,
    TheirComment = 25,
    AnotherComment = 26
}

我在字符串中使用它:

Dim sDateModified As String 
sDateModified = $"<div name='commenttype{CommentType.MyComment}'></div>"

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

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

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

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

这对我来说只是一种直觉。有人可以解释或指出有关它为何如此工作的文档吗?

2 个答案:

答案 0 :(得分:10)

您正在获取字符串值MyComment,因为它返回的是:

CommentType.MyComment.ToString()

String.FormatConsole.WriteLine will automatically call ToString()等方法,对于任何不是字符串的方法。字符串插值语法$""只是String.Format的语法糖,这就是字符串插值也以这种方式运行的原因。

您的解决方法是正确的。对于稍微紧凑的代码,您可以这样做:

CInt(CommentType.MyComment)

答案 1 :(得分:1)

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

Dim sDateModified As String 
sDateModified = $"<div name='commenttype{CommentType.MyComment:D}'></div>"