diff options
Diffstat (limited to 'src/mscorlib/shared/System/Text/StringBuilder.cs')
-rw-r--r-- | src/mscorlib/shared/System/Text/StringBuilder.cs | 78 |
1 files changed, 45 insertions, 33 deletions
diff --git a/src/mscorlib/shared/System/Text/StringBuilder.cs b/src/mscorlib/shared/System/Text/StringBuilder.cs index df1a889823..3a06114bff 100644 --- a/src/mscorlib/shared/System/Text/StringBuilder.cs +++ b/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<T>(char separator, params T[] values) - { - // Defer argument validation to the internal function - return AppendJoinCore(&separator, 1, values); - } + + #region AppendJoin - public unsafe StringBuilder AppendJoin<T>(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<T>(char separator, IEnumerable<T> values) + public unsafe StringBuilder AppendJoin<T>(string separator, IEnumerable<T> 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<T>(string separator, IEnumerable<T> 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<T>(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<StringBuilder>() != 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<T>(char separator, IEnumerable<T> 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<T>(char* separator, int separatorLength, IEnumerable<T> values) { if (values == null) - throw new ArgumentNullException(nameof(values)); - Contract.Ensures(Contract.Result<StringBuilder>() != null); + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.values); using (var en = values.GetEnumerator()) { @@ -1163,6 +1152,29 @@ namespace System.Text return this; } + private unsafe StringBuilder AppendJoinCore<T>(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==================================== ** ==============================================================================*/ |