字符串插值输出枚举名称而不是值
String interpolation outputs enum name instead of value
我希望有人可以解释有关字符串插值和枚举类型的默认功能。
我有这个枚举:
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>"
这对我来说是违反直觉的。有人可以解释或向我指出为什么它以这种方式工作的文档吗?
您将获得字符串值 MyComment
,因为这是返回值:
CommentType.MyComment.ToString()
像 String.Format
和 Console.WriteLine
will automatically call ToString()
这样的方法适用于任何还不是字符串的东西。字符串插值语法 $""
只是 String.Format
的语法糖,这就是为什么字符串插值也有这种行为。
您的解决方法是正确的。对于更紧凑的代码,您可以这样做:
CInt(CommentType.MyComment)
您只需要在插值中使用格式字符串将结果强制为整数格式。
Dim sDateModified As String
sDateModified = $"<div name='commenttype{CommentType.MyComment:D}'></div>"
我希望有人可以解释有关字符串插值和枚举类型的默认功能。
我有这个枚举:
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>"
这对我来说是违反直觉的。有人可以解释或向我指出为什么它以这种方式工作的文档吗?
您将获得字符串值 MyComment
,因为这是返回值:
CommentType.MyComment.ToString()
像 String.Format
和 Console.WriteLine
will automatically call ToString()
这样的方法适用于任何还不是字符串的东西。字符串插值语法 $""
只是 String.Format
的语法糖,这就是为什么字符串插值也有这种行为。
您的解决方法是正确的。对于更紧凑的代码,您可以这样做:
CInt(CommentType.MyComment)
您只需要在插值中使用格式字符串将结果强制为整数格式。
Dim sDateModified As String
sDateModified = $"<div name='commenttype{CommentType.MyComment:D}'></div>"