Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: SimonCropp/Polyfill
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 7.21.0
Choose a base ref
...
head repository: SimonCropp/Polyfill
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 7.22.0
Choose a head ref
  • 5 commits
  • 5 files changed
  • 2 contributors

Commits on Mar 5, 2025

  1. Update Polyfill_StringBuilder_AppendJoin.cs

    SimonCropp committed Mar 5, 2025
    Copy the full SHA
    f9045b5 View commit details

Commits on Mar 7, 2025

  1. Update global.json

    SimonCropp committed Mar 7, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    3f47110 View commit details

Commits on Mar 17, 2025

  1. refs or cleanup

    SimonCropp committed Mar 17, 2025
    Copy the full SHA
    cc97276 View commit details

Commits on Mar 20, 2025

  1. Better memory usage in StringBuilder AppendJoin

    pengweiqhca authored Mar 20, 2025
    Copy the full SHA
    8e3ccd6 View commit details
  2. Update Directory.Build.props

    SimonCropp committed Mar 20, 2025
    Copy the full SHA
    4b2d79c View commit details
Showing with 156 additions and 18 deletions.
  1. +2 −0 src/.editorconfig
  2. +1 −1 src/Directory.Build.props
  3. +1 −1 src/Directory.Packages.props
  4. +151 −15 src/Polyfill/Polyfill_StringBuilder_AppendJoin.cs
  5. +1 −1 src/global.json
2 changes: 2 additions & 0 deletions src/.editorconfig
Original file line number Diff line number Diff line change
@@ -335,6 +335,8 @@ resharper_return_value_of_pure_method_is_not_used_highlighting = error

resharper_all_underscore_local_parameter_name_highlighting = none

resharper_misleading_body_like_statement_highlighting = error

# Xml files
[*.{xml,config,nuspec,resx,vsixmanifest,csproj,targets,props,fsproj}]
indent_size = 2
2 changes: 1 addition & 1 deletion src/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<Version>7.21.0</Version>
<Version>7.22.0</Version>
<AssemblyVersion>1.0.0</AssemblyVersion>
<PackageTags>Polyfill</PackageTags>
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
2 changes: 1 addition & 1 deletion src/Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageVersion Include="NUnit" Version="3.14.0" />
<PackageVersion Include="NUnit3TestAdapter" Version="5.0.0" />
<PackageVersion Include="ProjectDefaults" Version="1.0.148" />
<PackageVersion Include="ProjectDefaults" Version="1.0.149" />
<PackageVersion Include="System.Memory" Version="4.6.0" />
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
<PackageVersion Include="Microsoft.Bcl.Memory" Version="9.0.1" />
166 changes: 151 additions & 15 deletions src/Polyfill/Polyfill_StringBuilder_AppendJoin.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
// <auto-generated />
#pragma warning disable

#nullable enable

namespace Polyfills;

using System;
using System.Text;
using System.Collections.Generic;

static partial class Polyfill
{
@@ -17,63 +20,196 @@ public static StringBuilder AppendJoin<T>(
this StringBuilder target,
char separator,
IEnumerable<T> values) =>
target.Append(string.Join(separator.ToString(), values));
target.AppendJoinCore(separator, values);

/// <summary>Concatenates and appends the members of a collection, using the specified char separator between each member.</summary>
//Link: https://learn.microsoft.com/en-us/dotnet/api/system.text.stringbuilder.appendjoin#system-text-stringbuilder-appendjoin-1(system-char-system-collections-generic-ienumerable((-0)))
public static StringBuilder AppendJoin<T>(
this StringBuilder target,
string separator,
string? separator,
IEnumerable<T> values) =>
target.Append(string.Join(separator, values));
target.AppendJoinCore(separator ?? string.Empty, values);

/// <summary>Concatenates the strings of the provided array, using the specified separator between each string, then appends the result to the current instance of the string builder.</summary>
//Link: https://learn.microsoft.com/en-us/dotnet/api/system.text.stringbuilder.appendjoin#system-text-stringbuilder-appendjoin(system-string-system-string())
public static StringBuilder AppendJoin(
this StringBuilder target,
string separator,
params string[] values) =>
target.Append(string.Join(separator, values));
string? separator,
params string?[] values) =>
target.AppendJoinCore(separator ?? string.Empty, values);

/// <summary>Concatenates the string representations of the elements in the provided array of objects, using the specified separator between each member, then appends the result to the current instance of the string builder.</summary>
//Link: https://learn.microsoft.com/en-us/dotnet/api/system.text.stringbuilder.appendjoin#system-text-stringbuilder-appendjoin(system-string-system-object())
public static StringBuilder AppendJoin(
this StringBuilder target,
string separator,
params Object[] values) =>
target.Append(string.Join(separator, values));
string? separator,
params object?[] values) =>
target.AppendJoinCore(separator ?? string.Empty, values);

/// <summary>Concatenates the strings of the provided array, using the specified char separator between each string, then appends the result to the current instance of the string builder.</summary>
//Link: https://learn.microsoft.com/en-us/dotnet/api/system.text.stringbuilder.appendjoin#system-text-stringbuilder-appendjoin(system-char-system-string())
public static StringBuilder AppendJoin(
this StringBuilder target,
char separator,
params string[] values) =>
target.Append(string.Join(separator.ToString(), values));
params string?[] values) =>
target.AppendJoinCore(separator, values);

/// <summary>Concatenates the string representations of the elements in the provided array of objects, using the specified char separator between each member, then appends the result to the current instance of the string builder.</summary>
//Link: https://learn.microsoft.com/en-us/dotnet/api/system.text.stringbuilder.appendjoin#system-text-stringbuilder-appendjoin(system-char-system-object())
public static StringBuilder AppendJoin(
this StringBuilder target,
char separator,
params object[] values) =>
target.Append(string.Join(separator.ToString(), values));
params object?[] values) =>
target.AppendJoinCore(separator, values);

/// <summary>Concatenates and appends the members of a collection, using the specified char separator between each member.</summary>
//Link: https://learn.microsoft.com/en-us/dotnet/api/system.text.stringbuilder.appendjoin#system-text-stringbuilder-appendjoin-1(system-char-system-collections-generic-ienumerable((-0)))
public static StringBuilder AppendJoin<T>(
this StringBuilder target,
char separator,
params T[] values) =>
target.Append(string.Join(separator.ToString(), values));
target.AppendJoinCore(separator, values);

/// <summary>Concatenates and appends the members of a collection, using the specified char separator between each member.</summary>
//Link: https://learn.microsoft.com/en-us/dotnet/api/system.text.stringbuilder.appendjoin#system-text-stringbuilder-appendjoin-1(system-string-system-collections-generic-ienumerable((-0)))
public static StringBuilder AppendJoin<T>(
this StringBuilder target,
string separator,
params T[] values) =>
target.Append(string.Join(separator.ToString(), values));
target.AppendJoinCore(separator, values);

private static StringBuilder AppendJoinCore<T>(
this StringBuilder target,
char separator,
IEnumerable<T> values)
{
if (values == null)
{
throw new ArgumentNullException(nameof(values));
}

using (IEnumerator<T> en = values.GetEnumerator())
{
if (!en.MoveNext())
{
return target;
}

T value = en.Current;
if (value != null)
{
target.Append(value.ToString());
}

while (en.MoveNext())
{
target.Append(separator);
value = en.Current;
if (value != null)
{
target.Append(value.ToString());
}
}
}
return target;
}

private static StringBuilder AppendJoinCore<T>(
this StringBuilder target,
char separator,
T[] values)
{
if (values == null)
{
throw new ArgumentNullException(nameof(values));
}

if (values.Length == 0)
{
return target;
}

if (values[0] != null)
{
target.Append(values[0]!.ToString());
}

for (int i = 1; i < values.Length; i++)
{
target.Append(separator);
if (values[i] != null)
{
target.Append(values[i]!.ToString());
}
}
return target;
}

private static StringBuilder AppendJoinCore<T>(
this StringBuilder target,
string separator,
IEnumerable<T> values)
{
if (values == null)
{
throw new ArgumentNullException(nameof(values));
}

using (IEnumerator<T> en = values.GetEnumerator())
{
if (!en.MoveNext())
{
return target;
}

T value = en.Current;
if (value != null)
{
target.Append(value.ToString());
}

while (en.MoveNext())
{
target.Append(separator);
value = en.Current;
if (value != null)
{
target.Append(value.ToString());
}
}
}
return target;
}

private static StringBuilder AppendJoinCore<T>(
this StringBuilder target,
string separator,
T[] values)
{
if (values == null)
{
throw new ArgumentNullException(nameof(values));
}

if (values.Length == 0)
{
return target;
}

if (values[0] != null)
{
target.Append(values[0]!.ToString());
}

for (int i = 1; i < values.Length; i++)
{
target.Append(separator);
if (values[i] != null)
{
target.Append(values[i]!.ToString());
}
}
return target;
}
#endif
}
2 changes: 1 addition & 1 deletion src/global.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"sdk": {
"version": "10.0.100-preview.3.25125.17",
"version": "10.0.100-preview.3.25156.15",
"allowPrerelease": true,
"rollForward": "latestFeature"
}