Jef*_*sor 2 .net stringbuilder append
当使用字符串构建器时,当使用枚举作为输入时,我从append和append行函数得到预期结果,但是当枚举被加框时,append行和append函数会给出不同的结果.
谁能告诉我这背后可能是什么?
代码输出:
Append Enum: 1
Append Enum To String: One
Append Line Enum: 1
Append Line Enum To String: One
Append Object: One
Append Object To String: One
Append Line Object: 1
Append Line Object To String: One
Run Code Online (Sandbox Code Playgroud)
码:
Public Enum eTest
One = 1
Two = 2
End Enum
Sub Main()
Dim sb As New System.Text.StringBuilder()
Dim x = eTest.One
sb.Append("Append Enum: ").Append(x).AppendLine()
sb.Append("Append Enum To String: ").Append(x.ToString()).AppendLine()
sb.Append("Append Line Enum: ").AppendLine(x)
sb.Append("Append Line Enum To String: ").AppendLine(x.ToString())
Dim o As Object = x
sb.Append("Append Object: ").Append(o).AppendLine()
sb.Append("Append Object To String: ").Append(o.ToString()).AppendLine()
sb.Append("Append Line Object: ").AppendLine(o)
sb.Append("Append Line Object To String: ").AppendLine(o.ToString())
Console.WriteLine(sb.ToString())
'===============================
Console.ReadKey()
End Sub
Run Code Online (Sandbox Code Playgroud)
这条线
sb.Append("Append Object: ").Append(o).AppendLine()
Run Code Online (Sandbox Code Playgroud)
导致o.ToString()附加到实例,StringBuilder这是差异.当然,该调用只是传递给枚举的盒装实例,这就是为什么你看到One这个调用.
这是因为您正在调用StringBuilder.Append(object)将o.ToString()在传入的对象实例中调用的重载.这在文档中明确说明:
该
Append方法调用该Object.ToString方法来获取字符串表示形式value.如果value是null,则不对StringBuilder对象进行任何更改.
另一方面,当你打电话
sb.Append("Append Enum: ").Append(x).AppendLine()
Run Code Online (Sandbox Code Playgroud)
其中x是枚举的实例,x将隐式转换为int将调用重载的实例StringBuilder.Append(int).
请注意,这是VB.NET特有的.在选择要调用的重载时,C#不会隐式转换x为; 它会调用.intStringBuilder.AppendStringBuilder.Append(object)
| 归档时间: |
|
| 查看次数: |
3449 次 |
| 最近记录: |