From: Joseph Musser Date: Fri, 21 Apr 2017 01:54:30 +0000 (-0400) Subject: Update StringBuilder.AppendJoin to approved API (dotnet/coreclr#11059) X-Git-Tag: submit/tizen/20210909.063632~11030^2~7175 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=249f18184b70ad13117a5bd549549bcbe87569d8;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Update StringBuilder.AppendJoin to approved API (dotnet/coreclr#11059) * Updated StringBuilder.AppendJoin to approved API * Organized StringBuilder.AppendJoin overloads * Added ThrowHelper, removed Contract.Ensures * Inline array accesses Commit migrated from https://github.com/dotnet/coreclr/commit/2ba1690fd56ab06d5998a9c64e1da8cb2a735ed8 --- diff --git a/src/coreclr/src/mscorlib/shared/System/Text/StringBuilder.cs b/src/coreclr/src/mscorlib/shared/System/Text/StringBuilder.cs index df1a889..3a06114 100644 --- a/src/coreclr/src/mscorlib/shared/System/Text/StringBuilder.cs +++ b/src/coreclr/src/mscorlib/shared/System/Text/StringBuilder.cs @@ -1081,67 +1081,56 @@ namespace System.Text return this; } - // Append joined values with a separator between each value. - public unsafe StringBuilder AppendJoin(char separator, params T[] values) - { - // Defer argument validation to the internal function - return AppendJoinCore(&separator, 1, values); - } + + #region AppendJoin - public unsafe StringBuilder AppendJoin(string separator, params T[] values) + public unsafe StringBuilder AppendJoin(string separator, params object[] values) { separator = separator ?? string.Empty; fixed (char* pSeparator = separator) { - // Defer argument validation to the internal function return AppendJoinCore(pSeparator, separator.Length, values); } } - public unsafe StringBuilder AppendJoin(char separator, IEnumerable values) + public unsafe StringBuilder AppendJoin(string separator, IEnumerable values) { - // Defer argument validation to the internal function - return AppendJoinCore(&separator, 1, values); + separator = separator ?? string.Empty; + fixed (char* pSeparator = separator) + { + return AppendJoinCore(pSeparator, separator.Length, values); + } } - public unsafe StringBuilder AppendJoin(string separator, IEnumerable values) + public unsafe StringBuilder AppendJoin(string separator, params string[] values) { separator = separator ?? string.Empty; fixed (char* pSeparator = separator) { - // Defer argument validation to the internal function return AppendJoinCore(pSeparator, separator.Length, values); } } - private unsafe StringBuilder AppendJoinCore(char* separator, int separatorLength, params T[] values) + public unsafe StringBuilder AppendJoin(char separator, params object[] values) { - if (values == null) - throw new ArgumentNullException(nameof(values)); - Contract.Ensures(Contract.Result() != null); - - if (values.Length == 0) - return this; + return AppendJoinCore(&separator, 1, values); + } - var value = values[0]; - if (value != null) - Append(value.ToString()); + public unsafe StringBuilder AppendJoin(char separator, IEnumerable values) + { + return AppendJoinCore(&separator, 1, values); + } - for (var i = 1; i < values.Length; i++) - { - Append(separator, separatorLength); - value = values[i]; - if (value != null) - Append(value.ToString()); - } - return this; + public unsafe StringBuilder AppendJoin(char separator, params string[] values) + { + return AppendJoinCore(&separator, 1, values); } + private unsafe StringBuilder AppendJoinCore(char* separator, int separatorLength, IEnumerable values) { if (values == null) - throw new ArgumentNullException(nameof(values)); - Contract.Ensures(Contract.Result() != null); + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.values); using (var en = values.GetEnumerator()) { @@ -1163,6 +1152,29 @@ namespace System.Text return this; } + private unsafe StringBuilder AppendJoinCore(char* separator, int separatorLength, T[] values) + { + if (values == null) + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.values); + + if (values.Length == 0) + return this; + + if (values[0] != null) + Append(values[0].ToString()); + + for (var i = 1; i < values.Length; i++) + { + Append(separator, separatorLength); + if (values[i] != null) + Append(values[i].ToString()); + } + return this; + } + + #endregion + + /*====================================Insert==================================== ** ==============================================================================*/ diff --git a/src/coreclr/src/mscorlib/src/System/ThrowHelper.cs b/src/coreclr/src/mscorlib/src/System/ThrowHelper.cs index 4dcf8d4..ff76738 100644 --- a/src/coreclr/src/mscorlib/src/System/ThrowHelper.cs +++ b/src/coreclr/src/mscorlib/src/System/ThrowHelper.cs @@ -416,6 +416,7 @@ namespace System type, stateMachine, pHandle, + values } //