StringBuilder: Use Decimal.TryFormat (#15170)
authorJustin Van Patten <jvp@justinvp.com>
Wed, 22 Nov 2017 23:34:03 +0000 (15:34 -0800)
committerStephen Toub <stoub@microsoft.com>
Wed, 22 Nov 2017 23:34:03 +0000 (18:34 -0500)
src/mscorlib/shared/System/Text/StringBuilder.cs
src/mscorlib/src/System/Decimal.cs

index da0182b..8d3961a 100644 (file)
@@ -1040,7 +1040,18 @@ namespace System.Text
 
         public StringBuilder Append(double value) => Append(value.ToString());
 
-        public StringBuilder Append(decimal value) => Append(value.ToString());
+        public StringBuilder Append(decimal value)
+        {
+            if (value.TryFormat(RemainingCurrentChunk, out int charsWritten))
+            {
+                m_ChunkLength += charsWritten;
+                return this;
+            }
+            else
+            {
+                return Append(value.ToString());
+            }
+        }
 
         [CLSCompliant(false)]
         public StringBuilder Append(ushort value)
index 2ea0ca5..998a73d 100644 (file)
@@ -60,7 +60,7 @@ namespace System
     [Serializable]
     [System.Runtime.Versioning.NonVersionable] // This only applies to field layout
     [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
-    public partial struct Decimal : IFormattable, IComparable, IConvertible, IComparable<Decimal>, IEquatable<Decimal>, IDeserializationCallback
+    public partial struct Decimal : IFormattable, IComparable, IConvertible, IComparable<Decimal>, IEquatable<Decimal>, IDeserializationCallback, ISpanFormattable
     {
         // Sign mask for the flags field. A value of zero in this bit indicates a
         // positive Decimal value, and a value of one in this bit indicates a