ktsu.Extensions 1.5.14

Prefix Reserved
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package ktsu.Extensions --version 1.5.14
                    
NuGet\Install-Package ktsu.Extensions -Version 1.5.14
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ktsu.Extensions" Version="1.5.14" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ktsu.Extensions" Version="1.5.14" />
                    
Directory.Packages.props
<PackageReference Include="ktsu.Extensions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ktsu.Extensions --version 1.5.14
                    
#r "nuget: ktsu.Extensions, 1.5.14"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ktsu.Extensions@1.5.14
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ktsu.Extensions&version=1.5.14
                    
Install as a Cake Addin
#tool nuget:?package=ktsu.Extensions&version=1.5.14
                    
Install as a Cake Tool

ktsu.Extensions

A comprehensive utility library of extension methods for collections, strings, dictionaries, and reflection in .NET.

License NuGet NuGet Downloads Build Status GitHub Stars

Introduction

ktsu.Extensions is a utility library that enhances the functionality of standard .NET types through extension methods. It provides a wide range of utilities for batch operations, string manipulations, and reflection helpers, making it easier to work with common data structures and types in a consistent, null-safe manner.

Features

  • Enumerable Extensions

    • WithIndex: Enumerates over an enumerable with the index of the item
    • ToCollection: Converts an enumerable to a collection
    • ForEach: Applies an action to each element of an enumerable
    • AnyNull: Checks if the enumerable contains any null items
    • Join: Concatenates elements with a separator
    • ToStringEnumerable: Converts items to strings with null handling
    • WriteItemsToConsole: Outputs collection items to the console
  • Collection Extensions

    • AddFrom: Adds items from an enumerable to a collection
    • ReplaceWith: Replaces all items in a collection with items from an enumerable
  • Dictionary Extensions

    • GetOrCreate: Gets the value for a key or creates a new value if the key doesn't exist
    • AddOrReplace: Adds a new value or replaces an existing value
  • String Extensions

    • Ordinal comparison helpers (StartsWithOrdinal, EndsWithOrdinal, ContainsOrdinal)
    • Prefix/suffix manipulation (RemoveSuffix, RemovePrefix)
    • ReplaceOrdinal: Replaces text using ordinal comparison
    • Line ending utilities (DetermineLineEndings, NormalizeLineEndings)
  • Reflection Extensions

    • TryFindMethod: Searches for methods across inheritance hierarchies

Installation

Package Manager Console

Install-Package ktsu.Extensions

.NET CLI

dotnet add package ktsu.Extensions

Package Reference

<PackageReference Include="ktsu.Extensions" Version="x.y.z" />

Usage Examples

Enumerable Extensions

using ktsu.Extensions;

// Iterate with index
foreach (var (item, index) in myList.WithIndex())
{
    Console.WriteLine($"Item at position {index}: {item}");
}

// Apply action to each item
myList.ForEach(item => Console.WriteLine(item));

// Check for nulls
if (myList.AnyNull())
{
    Console.WriteLine("List contains null items");
}

// Join items with a separator
var items = new[] { "apple", "banana", "cherry" };
string joined = items.Join(", ");  // "apple, banana, cherry"

// Convert to string enumerable
var numbers = new[] { 1, 2, 3 };
var strings = numbers.ToStringEnumerable();  // ["1", "2", "3"]

String Extensions

using ktsu.Extensions;

string text = "Hello, World!";

// Ordinal string comparisons
if (text.StartsWithOrdinal("Hello"))
{
    Console.WriteLine("Text starts with 'Hello'");
}

// Prefix/suffix manipulation
string withoutPrefix = text.RemovePrefix("Hello, ");  // "World!"
string withoutSuffix = text.RemoveSuffix("!");        // "Hello, World"

// Line ending handling
string mixedText = "Line1\r\nLine2\nLine3";
var lineEndingStyle = mixedText.DetermineLineEndings();  // LineEndingStyle.Mixed
string normalized = mixedText.NormalizeLineEndings(LineEndingStyle.Unix);  // All \n

Dictionary Extensions

using ktsu.Extensions;

var cache = new Dictionary<string, List<string>>();

// Get or create a value (uses parameterless constructor)
var items = cache.GetOrCreate("key");
items.Add("item1");

// Get or create with a specific default value
var otherItems = cache.GetOrCreate("key2", new List<string> { "default" });

// Add or replace a value
cache.AddOrReplace("key3", new List<string> { "item2" });

Collection Extensions

using ktsu.Extensions;

var collection = new List<string>();

// Add multiple items at once
collection.AddFrom(new[] { "item1", "item2", "item3" });

// Replace all items in the collection
collection.ReplaceWith(new[] { "new1", "new2" }); // Collection now contains only "new1" and "new2"

Advanced Usage

Null Item Handling

using ktsu.Extensions;

var items = new[] { "one", null, "three" };

// Convert to strings with null handling
var strings1 = items.ToStringEnumerable(NullItemHandling.Remove);   // ["one", "three"]
var strings2 = items.ToStringEnumerable(NullItemHandling.Include);  // ["one", null, "three"]
// NullItemHandling.Throw will throw an exception if null items are found

// Join with null handling
var joined = items.Join(", ", NullItemHandling.Remove);  // "one, three"

Reflection Helpers

using ktsu.Extensions;
using System.Reflection;

// Find a method across inheritance hierarchy
if (someType.TryFindMethod("MethodName", BindingFlags.Instance | BindingFlags.Public, out var methodInfo))
{
    // Use the method info
    methodInfo.Invoke(instance, parameters);
}

API Reference

Enumerable Extensions

Method Description
WithIndex Enumerates with the index of each item
ToCollection Converts an enumerable to a collection
ForEach Applies an action to each element
AnyNull Checks if enumerable contains any null items
Join Concatenates elements with a separator
ToStringEnumerable Converts items to strings with null handling
WriteItemsToConsole Displays enumerable items in console

String Extensions

Method Description
StartsWithOrdinal Checks if string starts with value using ordinal comparison
EndsWithOrdinal Checks if string ends with value using ordinal comparison
ContainsOrdinal Checks if string contains value using ordinal comparison
RemovePrefix Removes a prefix from a string if present
RemoveSuffix Removes a suffix from a string if present
ReplaceOrdinal Replaces text using ordinal comparison
DetermineLineEndings Identifies line ending style in a string
NormalizeLineEndings Converts line endings to a specific style

Collection Extensions

Method Description
AddFrom Adds items from an enumerable to a collection
ReplaceWith Replaces all items in a collection with new items

Dictionary Extensions

Method Description
GetOrCreate Gets existing value or creates new one
AddOrReplace Adds a new value or replaces existing one

Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Please make sure to update tests as appropriate.

License

This project is licensed under the MIT License - see the LICENSE.md file for details.

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (8)

Showing the top 5 NuGet packages that depend on ktsu.Extensions:

Package Downloads
ktsu.StrongPaths

A library that provides strong typing for common filesystem paths providing compile time feedback and runtime validation.

ktsu.ImGuiStyler

A library for expressively styling ImGui.NET interfaces.

ktsu.ToStringJsonConverter

A JSON converter for System.Text.Json that handles ToString and Parse methods for value types.

ktsu.ImGuiWidgets

A library of custom widgets using ImGui.NET and utilities to enhance ImGui-based applications.

ktsu.ImGuiPopups

A library for custom popups using ImGui.NET.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.5.15-pre.1 37 2/17/2026
1.5.14 197 2/16/2026
1.5.14-pre.1 40 2/16/2026
1.5.13 125 2/14/2026
1.5.12 108 2/14/2026
1.5.12-pre.3 44 2/6/2026
1.5.12-pre.2 44 2/5/2026
1.5.12-pre.1 50 2/3/2026
1.5.11 509 2/1/2026
1.5.10 197 1/30/2026
1.5.10-pre.2 46 1/28/2026
1.5.10-pre.1 44 1/26/2026
1.5.9 1,195 1/26/2026
1.5.9-pre.3 155 11/24/2025
1.5.9-pre.2 123 11/23/2025
1.5.9-pre.1 107 11/23/2025
1.5.8 829 11/14/2025
1.5.7 2,423 8/16/2025
1.5.6 3,260 5/22/2025
1.5.6-pre.2 177 5/20/2025
Loading failed

## v1.5.14 (patch)

Changes since v1.5.13:

- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.5.14-pre.1 (prerelease)

Changes since v1.5.13:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.5.13 (patch)

Changes since v1.5.12:

- Remove legacy build scripts ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.12 (patch)

Changes since v1.5.11:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.5.12-pre.3 (prerelease)

Changes since v1.5.12-pre.2:

- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.5.12-pre.2 (prerelease)

Changes since v1.5.12-pre.1:

- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.5.12-pre.1 (prerelease)

No significant changes detected since v1.5.12.

## v1.5.11 (patch)

Changes since v1.5.10:

- Add null checks to collection and dictionary extension methods ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.10 (patch)

Changes since v1.5.9:

- Update package version for Polyfill and enhance test assertions with descriptive messages ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.10-pre.2 (prerelease)

Changes since v1.5.10-pre.1:

- Update package version for Polyfill and enhance test assertions with descriptive messages ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.10-pre.1 (prerelease)

No significant changes detected since v1.5.10.

## v1.5.9 (patch)

Changes since v1.5.8:

- Update README.md to remove cloning references and enhance extension method descriptions ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package references and improve test assertions ([@matt-edmondson](https://github.com/matt-edmondson))
- Add CLAUDE.md for project guidance and documentation ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.9-pre.3 (prerelease)

Changes since v1.5.9-pre.2:

- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.5.9-pre.2 (prerelease)

Changes since v1.5.9-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.5.9-pre.1 (prerelease)

No significant changes detected since v1.5.9.

## v1.5.8 (patch)

Changes since v1.5.7:

- Enhance build configuration and test settings ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.7 (patch)

Changes since v1.5.6:

- Add new configuration files and update build workflows ([@matt-edmondson](https://github.com/matt-edmondson))
- Update configuration files and enhance build scripts ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.6 (patch)

Changes since v1.5.5:

- Remove deep cloning functionality and update SDK versions ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package references in Extensions.csproj ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.6-pre.2 (prerelease)

Changes since v1.5.6-pre.1:

- Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.5.6-pre.1 (prerelease)

No significant changes detected since v1.5.6.

## v1.5.5 (patch)

Changes since v1.5.4:

- Fix icon ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.4 (patch)

Changes since v1.5.3:

- Refactor: Remove unused namespaces and upgrade SDK ([@matt-edmondson](https://github.com/matt-edmondson))
- Add ReplaceWith method and related tests/documentation ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.4-pre.15 (prerelease)

Changes since v1.5.4-pre.14:


## v1.5.4-pre.14 (prerelease)

Changes since v1.5.4-pre.13:


## v1.5.4-pre.13 (prerelease)

Changes since v1.5.4-pre.12:


## v1.5.4-pre.12 (prerelease)

Changes since v1.5.4-pre.11:


## v1.5.4-pre.11 (prerelease)

Changes since v1.5.4-pre.10:


## v1.5.4-pre.10 (prerelease)

Changes since v1.5.4-pre.9:


## v1.5.4-pre.9 (prerelease)

Changes since v1.5.4-pre.8:


## v1.5.4-pre.8 (prerelease)

Changes since v1.5.4-pre.7:


## v1.5.4-pre.7 (prerelease)

Changes since v1.5.4-pre.6:


## v1.5.4-pre.6 (prerelease)

Changes since v1.5.4-pre.5:


## v1.5.4-pre.5 (prerelease)

Changes since v1.5.4-pre.4:


## v1.5.4-pre.4 (prerelease)

Changes since v1.5.4-pre.3:


## v1.5.4-pre.3 (prerelease)

Changes since v1.5.4-pre.2:


## v1.5.4-pre.2 (prerelease)

Changes since v1.5.4-pre.1:


## v1.5.4-pre.1 (prerelease)

No significant changes detected since v1.5.4.

## v1.5.3 (patch)

Changes since v1.5.2:

- Remove obsolete build configuration files and update extension classes with copyright information. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor project files and update DESCRIPTION. Changed project SDK references to ktsu.Sdk.Lib and ktsu.Sdk.Test, and revised DESCRIPTION to clarify the purpose of the library. ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.3-pre.1 (prerelease)

No significant changes detected since v1.5.3.

## v1.5.2 (patch)

Changes since v1.5.1:

- Update README to match standard template format ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.2-pre.1 (prerelease)

No significant changes detected since v1.5.2.

## v1.5.1 (patch)

Changes since v1.5.0:

- Update packages ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.5.0 (minor)

Changes since v1.4.0:

- Add LICENSE template ([@matt-edmondson](https://github.com/matt-edmondson))
- Update packages ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.4.1 (patch)

Changes since v1.4.0:

- Update packages ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.4.1-pre.3 (prerelease)

Changes since v1.4.1-pre.2:

- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.4.1-pre.2 (prerelease)

Changes since v1.4.1-pre.1:

- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.4.1-pre.1 (prerelease)

No significant changes detected since v1.4.1.

## v1.4.0 (minor)

Changes since v1.3.0:

- Apply new editorconfig ([@matt-edmondson](https://github.com/matt-edmondson))
- Add mailmap ([@matt-edmondson](https://github.com/matt-edmondson))
- Add automation scripts for metadata management and versioning ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor LineEndingStyle enumeration to standalone ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.3-pre.5 (prerelease)

Changes since v1.3.3-pre.4:

- Bump ktsu.DeepClone from 1.1.16 to 1.2.0 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.3-pre.4 (prerelease)

Changes since v1.3.3-pre.3:

- Bump Microsoft.DotNet.ILCompiler in the microsoft group ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.3-pre.3 (prerelease)

Changes since v1.3.3-pre.2:

- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.3.3-pre.2 (prerelease)

Changes since v1.3.3-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.3.3-pre.1 (prerelease)

Changes since v1.3.2:

- Add mailmap ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.2 (patch)

Changes since v1.3.1:

- Add automation scripts for metadata management and versioning ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.2-pre.27 (prerelease)

Changes since v1.3.2-pre.26:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.3.2-pre.26 (prerelease)

Changes since v1.3.2-pre.25:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.3.2-pre.25 (prerelease)

Changes since v1.3.2-pre.24:


## v1.3.2-pre.24 (prerelease)

Changes since v1.3.2-pre.23:


## v1.3.2-pre.23 (prerelease)

Changes since v1.3.2-pre.22:


## v1.3.2-pre.22 (prerelease)

Changes since v1.3.2-pre.21:

- Bump MSTest from 3.7.2 to 3.7.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.2-pre.21 (prerelease)

Changes since v1.3.2-pre.20:


## v1.3.2-pre.20 (prerelease)

Changes since v1.3.2-pre.19:


## v1.3.2-pre.19 (prerelease)

Changes since v1.3.2-pre.18:

- Bump MSTest from 3.7.1 to 3.7.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.2-pre.18 (prerelease)

Changes since v1.3.2-pre.17:

- Bump coverlet.collector from 6.0.3 to 6.0.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.2-pre.17 (prerelease)

Changes since v1.3.2-pre.16:


## v1.3.2-pre.16 (prerelease)

Changes since v1.3.2-pre.15:


## v1.3.2-pre.15 (prerelease)

Changes since v1.3.2-pre.14:

- Bump Microsoft.DotNet.ILCompiler in the microsoft group ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.2-pre.14 (prerelease)

Changes since v1.3.2-pre.13:

- Bump MSTest from 3.7.0 to 3.7.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.2-pre.13 (prerelease)

Changes since v1.3.2-pre.12:


## v1.3.2-pre.12 (prerelease)

Changes since v1.3.2-pre.11:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.3.2-pre.11 (prerelease)

Changes since v1.3.2-pre.10:

- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.3.2-pre.10 (prerelease)

Changes since v1.3.2-pre.9:


## v1.3.2-pre.9 (prerelease)

Changes since v1.3.2-pre.8:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.3.2-pre.8 (prerelease)

Changes since v1.3.2-pre.7:


## v1.3.2-pre.7 (prerelease)

Changes since v1.3.2-pre.6:

- Bump ktsu.DeepClone from 1.1.14 to 1.1.16 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.2-pre.6 (prerelease)

Changes since v1.3.2-pre.5:

- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.3.2-pre.5 (prerelease)

Changes since v1.3.2-pre.4:

- Add mailmap ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.2-pre.4 (prerelease)

Changes since v1.3.2-pre.3:

- Add automation scripts for metadata management and versioning ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.2-pre.3 (prerelease)

Changes since v1.3.2-pre.2:

- Bump coverlet.collector from 6.0.2 to 6.0.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.2-pre.2 (prerelease)

Changes since v1.3.2-pre.1:

- Bump ktsu.StrongStrings from 1.2.25 to 1.2.26 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.3.2-pre.1 (prerelease)

No significant changes detected since v1.3.2.

## v1.3.1 (patch)

Changes since v1.3.0:

- Refactor LineEndingStyle enumeration to standalone ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.3.0 (minor)

Changes since v1.2.0:

- Add line ending methods and tests, update README ([@matt-edmondson](https://github.com/matt-edmondson))
- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace LICENSE file with LICENSE.md and update copyright information ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor test method names and update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.2.16-pre.3 (prerelease)

Changes since v1.2.16-pre.2:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.16-pre.2 (prerelease)

Changes since v1.2.16-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.16-pre.1 (prerelease)

Changes since v1.2.15-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.15-pre.1 (prerelease)

Changes since v1.2.14:

- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.2.14 (patch)

Changes since v1.2.13:

- Sync icon.png ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.13 (patch)

Changes since v1.2.12:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.12 (patch)

Changes since v1.2.11:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.11 (patch)

Changes since v1.2.10:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.10 (patch)

Changes since v1.2.9:

- Replace LICENSE file with LICENSE.md and update copyright information ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.2.10-pre.1 (prerelease)

Changes since v1.2.10:

- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.2.9 (patch)

Changes since v1.2.8:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.8 (patch)

Changes since v1.2.7:

- Refactor test method names and update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.2.7 (patch)

Changes since v1.2.6:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.2.6 (patch)

Changes since v1.2.5:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.5 (patch)

Changes since v1.2.4:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.4 (patch)

Changes since v1.2.3:

- Updated packages in Extensions.csproj ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.2.3 (patch)

Changes since v1.2.2:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.2 (patch)

Changes since v1.2.1:

- Updated packages in Extensions.csproj ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.2.1 (patch)

Changes since v1.2.0:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest.TestAdapter from 3.6.4 to 3.7.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest.TestFramework from 3.6.4 to 3.7.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.2.0 (minor)

Changes since v1.1.0:

- Update README.md to document new Join extension method ([@matt-edmondson](https://github.com/matt-edmondson))
- Add comprehensive unit tests for Join method ([@matt-edmondson](https://github.com/matt-edmondson))
- Add Join extension methods to EnumerableExtensions ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.1.0 (minor)

Changes since v1.0.0:

- Update DESCRIPTION and overhaul README.md ([@matt-edmondson](https://github.com/matt-edmondson))
- Add AddOrReplace method to DictionaryExtensions ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package references and add ILCompiler dependency ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new tests and refactor extension methods ([@matt-edmondson](https://github.com/matt-edmondson))
- Add collection handling and conversion extensions ([@matt-edmondson](https://github.com/matt-edmondson))
- Add string.As<StrongStrong>() ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Update VERSION ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Add a locket overload of ForEach ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix Dictionary return types ([@matt-edmondson](https://github.com/matt-edmondson))
- Add ShallowClone to enumerables and dictionaries ([@matt-edmondson](https://github.com/matt-edmondson))
- Add DeepClone for dictionaries ([@matt-edmondson](https://github.com/matt-edmondson))
- Add DeepClone enumerable extension ([@matt-edmondson](https://github.com/matt-edmondson))
- Add an overload to ToCollection that takes an object to acquire a lock on while enumerating ([@matt-edmondson](https://github.com/matt-edmondson))
- Add CollectionExtensions with AddMany method ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new unit tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Minor code style changes ([@matt-edmondson](https://github.com/matt-edmondson))
- Add support for GetOrCreate on concurrent dictionaries ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.37 (patch)

Changes since v1.0.36:

- Bump ktsu.DeepClone from 1.1.2 to 1.1.3 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.36 (patch)

Changes since v1.0.35:

- Bump MSTest.TestFramework from 3.6.3 to 3.6.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.35 (patch)

Changes since v1.0.34:

- Bump MSTest.TestAdapter from 3.6.3 to 3.6.4 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.34 (patch)

Changes since v1.0.33:

- Update VERSION to 1.0.34 ([@matt-edmondson](https://github.com/matt-edmondson))
- Updated packages in Extensions.csproj ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.33 (patch)

Changes since v1.0.32:

- Update VERSION to 1.0.33 ([@matt-edmondson](https://github.com/matt-edmondson))
- Updated packages in Extensions.csproj ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.32 (patch)

Changes since v1.0.31:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.0.31 (patch)

Changes since v1.0.30:

- Update package references and add ILCompiler dependency ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.30 (patch)

Changes since v1.0.29:

- Add new tests and refactor extension methods ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.29 (patch)

Changes since v1.0.28:

- Add collection handling and conversion extensions ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.28 (patch)

Changes since v1.0.27:

- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.0.27 (patch)

Changes since v1.0.26:

- Bump ktsu.DeepClone from 1.0.15 to 1.0.16 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.26 (patch)

Changes since v1.0.25:

- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Microsoft.NET.Test.Sdk in the microsoft group ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.25 (patch)

Changes since v1.0.24:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.24 (patch)

Changes since v1.0.23:

- Bump MSTest.TestAdapter from 3.6.2 to 3.6.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestFramework from 3.6.2 to 3.6.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.23 (patch)

Changes since v1.0.22:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.22 (patch)

Changes since v1.0.21:

- Bump MSTest.TestAdapter from 3.6.1 to 3.6.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestFramework from 3.6.1 to 3.6.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.21 (patch)

Changes since v1.0.20:

- Bump ktsu.DeepClone from 1.0.11 to 1.0.12 in the ktsu group ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.20 (patch)

Changes since v1.0.19:

- Bump MSTest.TestFramework from 3.6.0 to 3.6.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.19 (patch)

Changes since v1.0.18:

- Bump MSTest.TestAdapter from 3.6.0 to 3.6.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.18 (patch)

Changes since v1.0.17:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.17 (patch)

Changes since v1.0.16:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.0.16 (patch)

Changes since v1.0.15:

- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.15 (patch)

Changes since v1.0.14:

- Update VERSION to 1.0.15 ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.14 (patch)

Changes since v1.0.13:

- Add string.As<StrongStrong>() ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.13 (patch)

Changes since v1.0.12:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.0.12 (patch)

Changes since v1.0.11:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.0.11 (patch)

Changes since v1.0.10:

- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))

## v1.0.10 (patch)

Changes since v1.0.9:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dependabot-merge.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest.TestFramework from 3.5.2 to 3.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump ktsu.DeepClone from 1.0.2 to 1.0.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump ktsu.StrongStrings from 1.2.0 to 1.2.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump MSTest.TestAdapter from 3.5.2 to 3.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.9 (patch)

Changes since v1.0.8:

- Bump ktsu.StrongStrings from 1.1.1 to 1.2.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))

## v1.0.8 (patch)

Changes since 1.0.7:

- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Update VERSION ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))

## v1.0.0 (major)

- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update build scripts ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.targets ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Delete Extensions.Test/Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Extensions.csproj ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Extensions.Test.csproj ([@matt-edmondson](https://github.com/matt-edmondson))
- Update build config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update readme ([@matt-edmondson](https://github.com/matt-edmondson))
- Update descriptions and readme ([@matt-edmondson](https://github.com/matt-edmondson))
- Update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Add ForEach to enumerable extensions ([@matt-edmondson](https://github.com/matt-edmondson))
- Create dependabot-merge.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Add an overload of GetOrCreate for dictionaries that takes a supplied default value ([@matt-edmondson](https://github.com/matt-edmondson))
- Update README.md ([@matt-edmondson](https://github.com/matt-edmondson))
- Update README.md ([@matt-edmondson](https://github.com/matt-edmondson))
- Read from AUTHORS file during build ([@matt-edmondson](https://github.com/matt-edmondson))
- Read PackageDescription from DESCRIPTION file ([@matt-edmondson](https://github.com/matt-edmondson))
- Create VERSION ([@matt-edmondson](https://github.com/matt-edmondson))
- Read from VERSION when building ([@matt-edmondson](https://github.com/matt-edmondson))
- Assign dependabot PRs to matt ([@matt-edmondson](https://github.com/matt-edmondson))
- Dont try to push packages when building pull requests ([@matt-edmondson](https://github.com/matt-edmondson))
- Avoid double upload of symbols package ([@matt-edmondson](https://github.com/matt-edmondson))
- Enable dependabot and sourcelink ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate from .project.props to Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- v1.0.0-alpha.8 ([@matt-edmondson](https://github.com/matt-edmondson))
- Add ReplaceOrdinal for strings ([@matt-edmondson](https://github.com/matt-edmondson))
- Add String extensions for StrongStrings ([@matt-edmondson](https://github.com/matt-edmondson))
- Added RemoveSuffix and RemovePrefix ([@matt-edmondson](https://github.com/matt-edmondson))
- Make Dictionary.GetOrCreate not return a nullable ([@matt-edmondson](https://github.com/matt-edmondson))
- Add IEnumerable.ToCollection ([@matt-edmondson](https://github.com/matt-edmondson))
- Add EnumerableExtensions hoisted from ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Add DictionaryExtensions.GetOrCreate() ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .project.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Initial commit ([@matt-edmondson](https://github.com/matt-edmondson))