![]() |
VOOZH | about |
dotnet add package ktsu.Extensions --version 1.5.17
NuGet\Install-Package ktsu.Extensions -Version 1.5.17
<PackageReference Include="ktsu.Extensions" Version="1.5.17" />
<PackageVersion Include="ktsu.Extensions" Version="1.5.17" />Directory.Packages.props
<PackageReference Include="ktsu.Extensions" />Project file
paket add ktsu.Extensions --version 1.5.17
#r "nuget: ktsu.Extensions, 1.5.17"
#:package ktsu.Extensions@1.5.17
#addin nuget:?package=ktsu.Extensions&version=1.5.17Install as a Cake Addin
#tool nuget:?package=ktsu.Extensions&version=1.5.17Install as a Cake Tool
A comprehensive utility library of extension methods for collections, strings, dictionaries, and reflection in .NET.
👁 License
👁 NuGet
👁 NuGet Downloads
👁 Build Status
👁 GitHub Stars
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.
Enumerable Extensions
WithIndex: Enumerates over an enumerable with the index of the itemToCollection: Converts an enumerable to a collectionForEach: Applies an action to each element of an enumerableAnyNull: Checks if the enumerable contains any null itemsJoin: Concatenates elements with a separatorToStringEnumerable: Converts items to strings with null handlingWriteItemsToConsole: Outputs collection items to the consoleCollection Extensions
AddFrom: Adds items from an enumerable to a collectionReplaceWith: Replaces all items in a collection with items from an enumerableDictionary Extensions
GetOrCreate: Gets the value for a key or creates a new value if the key doesn't existAddOrReplace: Adds a new value or replaces an existing valueString Extensions
StartsWithOrdinal, EndsWithOrdinal, ContainsOrdinal)RemoveSuffix, RemovePrefix)ReplaceOrdinal: Replaces text using ordinal comparisonDetermineLineEndings, NormalizeLineEndings)Reflection Extensions
TryFindMethod: Searches for methods across inheritance hierarchiesInstall-Package ktsu.Extensions
dotnet add package ktsu.Extensions
<PackageReference Include="ktsu.Extensions" Version="x.y.z" />
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"]
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
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" });
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"
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"
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);
}
| 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 |
| 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 |
| Method | Description |
|---|---|
AddFrom |
Adds items from an enumerable to a collection |
ReplaceWith |
Replaces all items in a collection with new items |
| Method | Description |
|---|---|
GetOrCreate |
Gets existing value or creates new one |
AddOrReplace |
Adds a new value or replaces existing one |
Contributions are welcome! Here's how you can help:
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)Please make sure to update tests as appropriate.
This project is licensed under the MIT License - see the file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 is compatible. net5.0-windows net5.0-windows was computed. net6.0 net6.0 is compatible. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 is compatible. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 is compatible. |
| .NET Framework | net461 net461 was computed. net462 net462 was computed. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
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.TextFilter
A library providing methods for matching and filtering text. It supports glob patterns, regular expressions, and fuzzy matching. |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.5.17 | 129 | 6/15/2026 |
| 1.5.16 | 183 | 6/13/2026 |
| 1.5.15 | 364 | 6/12/2026 |
| 1.5.15-pre.1 | 87 | 2/17/2026 |
| 1.5.14 | 3,865 | 2/16/2026 |
| 1.5.14-pre.1 | 74 | 2/16/2026 |
| 1.5.13 | 268 | 2/14/2026 |
| 1.5.12 | 250 | 2/14/2026 |
| 1.5.12-pre.3 | 73 | 2/6/2026 |
| 1.5.12-pre.2 | 70 | 2/5/2026 |
| 1.5.12-pre.1 | 83 | 2/3/2026 |
| 1.5.11 | 653 | 2/1/2026 |
| 1.5.10 | 337 | 1/30/2026 |
| 1.5.10-pre.2 | 77 | 1/28/2026 |
| 1.5.10-pre.1 | 78 | 1/26/2026 |
| 1.5.9 | 1,598 | 1/26/2026 |
| 1.5.9-pre.3 | 184 | 11/24/2025 |
| 1.5.9-pre.2 | 157 | 11/23/2025 |
| 1.5.9-pre.1 | 143 | 11/23/2025 |
| 1.5.8 | 884 | 11/14/2025 |
## v1.5.17 (patch)
Changes since v1.5.16:
- Bump Polyfill from 10.8.1 to 10.10.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 8 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.5.16 (patch)
Changes since v1.5.15:
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.5.15 (patch)
Changes since v1.5.14:
- Sync .github\workflows\update-sdks.yml ([@ktsu[bot]](https://github.com/ktsu[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 .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump Polyfill from 10.8.0 to 10.8.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the ktsu group with 3 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.7.0 to 10.8.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.6.0 to 10.7.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.5.1 to 10.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.Sdk from 4.2.2 to 4.2.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the microsoft group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.5.0 to 10.5.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.4.0 to 10.5.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 10.3.0 to 10.4.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump Polyfill from 9.7.6 to 10.3.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.Sdk from 4.1.0 to 4.2.2 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the system group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump the microsoft group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\workflows\dotnet.yml ([@KtsuTools](https://github.com/KtsuTools))
## v1.5.15-pre.1 (prerelease)
No significant changes detected since v1.5.15.
## 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)
No significant changes detected since v1.5.14.
## 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))