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

15

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

我有这个枚举:

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

我在一个字符串中使用它:

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

我原本期望CommentType.MyComment被计算并使用整数值24。结果应该是:<div name='commenttype24'></div>

但实际发生的是,标识符被使用,导致输出为:<div name='commenttypeMyComment'></div>

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

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

对我来说,这感觉很不直观。有人可以解释一下或指导我如何查阅相关文档吗?


3
这就是 Enum.ToString() 返回的内容。 - SLaks
@SLaks 哦,好的,所以它在使用 Enum.ToString 解析时就有意义了。 - Jack Thor
还有一件需要注意的事情是,枚举类型可以包含超出范围的值(例如 CommentType foo = (CommentType)17。在这种情况下,$"{foo}" 返回 "17"。 - Andy
2个回答

15

你得到了字符串值 MyComment,因为这是由以下代码返回的:

CommentType.MyComment.ToString()

String.FormatConsole.WriteLine等方法会自动调用ToString()来处理非字符串类型的内容。字符串插值语法$""只是对String.Format的语法糖,因此字符串插值也会有同样的行为。

你的解决方法是正确的。为了让代码更加简洁,你可以这样写:

CInt(CommentType.MyComment)

11

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接