Эта строка
sb.Append("Append Object: ").Append(o).AppendLine()
приводит к добавлению o.ToString()
к экземпляру StringBuilder
, и в этом разница.Конечно, этот вызов просто проходит в упакованный экземпляр вашего перечисления, и поэтому вы видите One
для этого вызова.
Это потому, что вы вызываете перегрузку StringBuilder.Append(object)
который просто вызовет o.ToString()
на переданном экземпляре объекта.Это явно указано в документации:
Метод Append
вызывает метод Object.ToString
, чтобы получить строковое представление value
.Если value
равно null
, в объект StringBuilder
не вносятся изменения.
С другой стороны, когда вы вызываете
sb.Append("Append Enum: ").Append(x).AppendLine()
, где x
является экземпляром перечисления, x
будет неявно преобразован в экземпляр int
, который вызовет перегрузку StringBuilder.Append(int)
.
Обратите внимание, что это характерно для VB.СЕТЬ.C # не будет неявно преобразовывать x
в int
при выборе, какую перегрузку StringBuilder.Append
вызывать;это вызовет StringBuilder.Append(object)
.