ktsu.Extensions
1.5.9
Prefix Reserved
See the version list below for details.
dotnet add package ktsu.Extensions --version 1.5.9
NuGet\Install-Package ktsu.Extensions -Version 1.5.9
<PackageReference Include="ktsu.Extensions" Version="1.5.9" />
<PackageVersion Include="ktsu.Extensions" Version="1.5.9" />
<PackageReference Include="ktsu.Extensions" />
paket add ktsu.Extensions --version 1.5.9
#r "nuget: ktsu.Extensions, 1.5.9"
#:package ktsu.Extensions@1.5.9
#addin nuget:?package=ktsu.Extensions&version=1.5.9
#tool nuget:?package=ktsu.Extensions&version=1.5.9
ktsu.Extensions
A comprehensive utility library of extension methods for collections, strings, dictionaries, and reflection in .NET.
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 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 console
Collection Extensions
AddFrom: Adds items from an enumerable to a collectionReplaceWith: 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 existAddOrReplace: 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)
- Ordinal comparison helpers (
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:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - 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 | Versions 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. |
-
.NETStandard 2.0
- Microsoft.SourceLink.AzureRepos.Git (>= 8.0.0)
- Microsoft.SourceLink.GitHub (>= 8.0.0)
- Polyfill (>= 6.9.0)
- System.Memory (>= 4.5.5)
- System.Threading.Tasks.Extensions (>= 4.5.4)
-
.NETStandard 2.1
- Microsoft.SourceLink.AzureRepos.Git (>= 8.0.0)
- Microsoft.SourceLink.GitHub (>= 8.0.0)
- Polyfill (>= 6.9.0)
-
net10.0
- Microsoft.SourceLink.AzureRepos.Git (>= 8.0.0)
- Microsoft.SourceLink.GitHub (>= 8.0.0)
- Polyfill (>= 6.9.0)
-
net5.0
- Microsoft.SourceLink.AzureRepos.Git (>= 8.0.0)
- Microsoft.SourceLink.GitHub (>= 8.0.0)
- Polyfill (>= 6.9.0)
-
net6.0
- Microsoft.SourceLink.AzureRepos.Git (>= 8.0.0)
- Microsoft.SourceLink.GitHub (>= 8.0.0)
- Polyfill (>= 6.9.0)
-
net7.0
- Microsoft.SourceLink.AzureRepos.Git (>= 8.0.0)
- Microsoft.SourceLink.GitHub (>= 8.0.0)
- Polyfill (>= 6.9.0)
-
net8.0
- Microsoft.SourceLink.AzureRepos.Git (>= 8.0.0)
- Microsoft.SourceLink.GitHub (>= 8.0.0)
- Polyfill (>= 6.9.0)
-
net9.0
- Microsoft.SourceLink.AzureRepos.Git (>= 8.0.0)
- Microsoft.SourceLink.GitHub (>= 8.0.0)
- Polyfill (>= 6.9.0)
NuGet packages (9)
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.10-pre.2 | 26 | 1/28/2026 |
| 1.5.10-pre.1 | 34 | 1/26/2026 |
| 1.5.9 | 205 | 1/26/2026 |
| 1.5.9-pre.3 | 149 | 11/24/2025 |
| 1.5.9-pre.2 | 116 | 11/23/2025 |
| 1.5.9-pre.1 | 97 | 11/23/2025 |
| 1.5.8 | 808 | 11/14/2025 |
| 1.5.7 | 1,713 | 8/16/2025 |
| 1.5.6 | 3,237 | 5/22/2025 |
| 1.5.6-pre.2 | 169 | 5/20/2025 |
| 1.5.5 | 2,479 | 5/18/2025 |
| 1.5.4 | 240 | 5/18/2025 |
| 1.5.4-pre.15 | 125 | 5/17/2025 |
| 1.5.4-pre.14 | 179 | 5/16/2025 |
| 1.5.4-pre.13 | 253 | 5/15/2025 |
| 1.5.4-pre.12 | 261 | 5/14/2025 |
| 1.5.4-pre.11 | 256 | 5/13/2025 |
| 1.5.4-pre.10 | 282 | 5/12/2025 |
| 1.5.4-pre.9 | 208 | 5/11/2025 |
| 1.5.4-pre.8 | 150 | 5/10/2025 |
| 1.5.4-pre.7 | 96 | 5/9/2025 |
| 1.5.4-pre.6 | 167 | 5/8/2025 |
| 1.5.4-pre.5 | 155 | 5/7/2025 |
| 1.5.4-pre.4 | 182 | 5/6/2025 |
| 1.5.4-pre.3 | 158 | 5/5/2025 |
| 1.5.4-pre.2 | 155 | 5/4/2025 |
| 1.5.4-pre.1 | 156 | 5/4/2025 |
| 1.5.3 | 487 | 5/4/2025 |
| 1.5.3-pre.1 | 89 | 4/26/2025 |
| 1.5.2 | 1,152 | 4/25/2025 |
| 1.5.2-pre.1 | 171 | 4/4/2025 |
| 1.5.1 | 718 | 3/30/2025 |
| 1.5.0 | 2,882 | 3/30/2025 |
| 1.4.1 | 161 | 3/29/2025 |
| 1.4.1-pre.3 | 130 | 3/29/2025 |
| 1.4.1-pre.2 | 489 | 3/25/2025 |
| 1.4.1-pre.1 | 129 | 2/19/2025 |
| 1.4.0 | 4,997 | 2/18/2025 |
| 1.3.3-pre.5 | 107 | 2/17/2025 |
| 1.3.3-pre.4 | 123 | 2/11/2025 |
| 1.3.3-pre.3 | 143 | 2/6/2025 |
| 1.3.3-pre.2 | 124 | 2/5/2025 |
| 1.3.3-pre.1 | 120 | 2/5/2025 |
| 1.3.2 | 4,311 | 1/2/2025 |
| 1.3.2-pre.27 | 95 | 2/4/2025 |
| 1.3.2-pre.26 | 118 | 2/3/2025 |
| 1.3.2-pre.25 | 112 | 2/2/2025 |
| 1.3.2-pre.24 | 115 | 1/31/2025 |
| 1.3.2-pre.23 | 112 | 1/29/2025 |
| 1.3.2-pre.22 | 109 | 1/27/2025 |
| 1.3.2-pre.21 | 89 | 1/26/2025 |
| 1.3.2-pre.20 | 108 | 1/24/2025 |
| 1.3.2-pre.19 | 103 | 1/22/2025 |
| 1.3.2-pre.18 | 97 | 1/20/2025 |
| 1.3.2-pre.17 | 92 | 1/18/2025 |
| 1.3.2-pre.16 | 108 | 1/16/2025 |
| 1.3.2-pre.15 | 97 | 1/14/2025 |
| 1.3.2-pre.14 | 116 | 1/13/2025 |
| 1.3.2-pre.13 | 89 | 1/11/2025 |
| 1.3.2-pre.12 | 110 | 1/10/2025 |
| 1.3.2-pre.11 | 115 | 1/10/2025 |
| 1.3.2-pre.10 | 110 | 1/8/2025 |
| 1.3.2-pre.9 | 117 | 1/7/2025 |
| 1.3.2-pre.8 | 98 | 1/6/2025 |
| 1.3.2-pre.7 | 122 | 1/4/2025 |
| 1.3.2-pre.6 | 117 | 1/3/2025 |
| 1.3.2-pre.5 | 123 | 1/3/2025 |
| 1.3.2-pre.4 | 139 | 1/3/2025 |
| 1.3.2-pre.3 | 136 | 1/1/2025 |
| 1.3.2-pre.2 | 139 | 12/31/2024 |
| 1.3.2-pre.1 | 127 | 12/29/2024 |
| 1.3.1 | 3,159 | 12/28/2024 |
| 1.3.0 | 174 | 12/28/2024 |
| 1.2.16-pre.3 | 97 | 12/28/2024 |
| 1.2.16-pre.2 | 117 | 12/27/2024 |
| 1.2.16-pre.1 | 118 | 12/27/2024 |
| 1.2.15-pre.1 | 94 | 12/27/2024 |
| 1.2.14 | 1,028 | 12/26/2024 |
| 1.2.13 | 168 | 12/26/2024 |
| 1.2.12 | 154 | 12/26/2024 |
| 1.2.11 | 178 | 12/26/2024 |
| 1.2.10 | 183 | 12/26/2024 |
| 1.2.10-pre.1 | 96 | 12/27/2024 |
| 1.2.9 | 190 | 12/26/2024 |
| 1.2.8 | 2,821 | 12/26/2024 |
| 1.2.7 | 2,177 | 12/24/2024 |
| 1.2.6 | 676 | 12/23/2024 |
| 1.2.5 | 152 | 12/23/2024 |
| 1.2.4 | 610 | 12/22/2024 |
| 1.2.3 | 210 | 12/22/2024 |
| 1.2.2 | 239 | 12/22/2024 |
| 1.2.1 | 263 | 12/22/2024 |
| 1.2.0 | 873 | 12/19/2024 |
| 1.1.0 | 181 | 12/19/2024 |
| 1.0.37 | 688 | 12/13/2024 |
| 1.0.36 | 809 | 12/5/2024 |
| 1.0.35 | 434 | 12/4/2024 |
| 1.0.34 | 572 | 12/2/2024 |
| 1.0.33 | 165 | 12/2/2024 |
| 1.0.32 | 402 | 12/2/2024 |
| 1.0.31 | 559 | 12/1/2024 |
| 1.0.30 | 312 | 12/1/2024 |
| 1.0.29 | 175 | 12/1/2024 |
| 1.0.28 | 267 | 11/30/2024 |
| 1.0.27 | 381 | 11/28/2024 |
| 1.0.26 | 435 | 11/26/2024 |
| 1.0.25 | 1,239 | 11/14/2024 |
| 1.0.24 | 423 | 11/13/2024 |
| 1.0.23 | 995 | 11/2/2024 |
| 1.0.22 | 464 | 11/1/2024 |
| 1.0.21 | 1,180 | 10/16/2024 |
| 1.0.20 | 788 | 10/5/2024 |
| 1.0.19 | 318 | 10/4/2024 |
| 1.0.18 | 898 | 9/21/2024 |
| 1.0.17 | 386 | 9/19/2024 |
| 1.0.16 | 192 | 9/19/2024 |
| 1.0.15 | 373 | 9/19/2024 |
| 1.0.14 | 312 | 9/19/2024 |
| 1.0.13 | 327 | 9/19/2024 |
| 1.0.12 | 224 | 9/18/2024 |
| 1.0.11 | 177 | 9/18/2024 |
| 1.0.10 | 249 | 9/18/2024 |
| 1.0.9 | 808 | 9/18/2024 |
| 1.0.8 | 598 | 9/14/2024 |
| 1.0.7 | 212 | 9/14/2024 |
## v1.5.9 (patch)
Changes since v1.5.8:
- 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))
- Update README.md to remove cloning references and enhance extension method descriptions ([@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)
Changes since v1.5.8:
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## 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:
- Update configuration files and enhance build scripts ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new configuration files and update build workflows ([@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 .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@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 .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.5.6-pre.1 (prerelease)
Incremental prerelease update.
## 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)
Incremental prerelease update.
## v1.5.3 (patch)
Changes since v1.5.2:
- 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))
- Remove obsolete build configuration files and update extension classes with copyright information. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.5.3-pre.1 (prerelease)
Incremental prerelease update.
## 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)
Incremental prerelease update.
## 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-changelog.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.4.1-pre.2 (prerelease)
Changes since v1.4.1-pre.1:
- Sync Directory.Build.targets ([@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 scripts\make-version.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.4.1-pre.1 (prerelease)
Incremental prerelease update.
## 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 .mailmap ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\make-version.ps1 ([@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)
Incremental prerelease update.
## 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))
- Refactor test method names and update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace LICENSE file with LICENSE.md and update copyright information ([@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:
## v1.2.3 (patch)
Changes since v1.2.2:
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.2.2 (patch)
Changes since v1.2.1:
## v1.2.1 (patch)
Changes since v1.2.0:
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- 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.targets ([@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]))
## v1.2.0 (minor)
Changes since v1.1.0:
- Add Join extension methods to EnumerableExtensions ([@matt-edmondson](https://github.com/matt-edmondson))
- Add comprehensive unit tests for Join method ([@matt-edmondson](https://github.com/matt-edmondson))
- Update README.md to document new Join extension method ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.1.0 (minor)
Changes since v1.0.0:
- Add ShallowClone to enumerables and dictionaries ([@matt-edmondson](https://github.com/matt-edmondson))
- Add AddOrReplace method to DictionaryExtensions ([@matt-edmondson](https://github.com/matt-edmondson))
- Add string.As<StrongStrong>() ([@matt-edmondson](https://github.com/matt-edmondson))
- Add DeepClone for dictionaries ([@matt-edmondson](https://github.com/matt-edmondson))
- Add collection handling and conversion extensions ([@matt-edmondson](https://github.com/matt-edmondson))
- Update DESCRIPTION and overhaul README.md ([@matt-edmondson](https://github.com/matt-edmondson))
- Add support for GetOrCreate on concurrent dictionaries ([@matt-edmondson](https://github.com/matt-edmondson))
- Update package references and add ILCompiler dependency ([@matt-edmondson](https://github.com/matt-edmondson))
- Add a locket overload of ForEach ([@matt-edmondson](https://github.com/matt-edmondson))
- Add CollectionExtensions with AddMany method ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix Dictionary return types ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate ktsu.io to ktsu namespace ([@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))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
- Add new tests and refactor extension methods ([@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 DeepClone enumerable extension ([@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:
## v1.0.33 (patch)
Changes since v1.0.32:
## 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.props ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync Directory.Build.targets ([@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.TestFramework from 3.6.2 to 3.6.3 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestAdapter 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:
## 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\dependabot-merge.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]))
- 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\dotnet.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.StrongStrings from 1.2.0 to 1.2.1 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump MSTest.TestAdapter from 3.5.2 to 3.6.0 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Bump ktsu.DeepClone from 1.0.2 to 1.0.3 ([@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))
- Migrate ktsu.io to ktsu namespace ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.0 (major)
- Add IEnumerable.ToCollection ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Add DictionaryExtensions.GetOrCreate() ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@matt-edmondson](https://github.com/matt-edmondson))
- Avoid double upload of symbols package ([@matt-edmondson](https://github.com/matt-edmondson))
- Read from VERSION when building ([@matt-edmondson](https://github.com/matt-edmondson))
- Update build config ([@matt-edmondson](https://github.com/matt-edmondson))
- Update nuget.config ([@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))
- Initial commit ([@matt-edmondson](https://github.com/matt-edmondson))
- Update descriptions and readme ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .project.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update dotnet.yml ([@matt-edmondson](https://github.com/matt-edmondson))
- Update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Create dependabot-merge.yml ([@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))
- Update build scripts ([@matt-edmondson](https://github.com/matt-edmondson))
- Added RemoveSuffix and RemovePrefix ([@matt-edmondson](https://github.com/matt-edmondson))
- Add EnumerableExtensions hoisted from ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Read from AUTHORS file during build ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.targets ([@matt-edmondson](https://github.com/matt-edmondson))
- Read PackageDescription from DESCRIPTION file ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate from .project.props to Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Enable dependabot and sourcelink ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- Add ForEach to enumerable extensions ([@matt-edmondson](https://github.com/matt-edmondson))
- Update Directory.Build.props ([@matt-edmondson](https://github.com/matt-edmondson))
- v1.0.0-alpha.8 ([@matt-edmondson](https://github.com/matt-edmondson))
- Add github package support ([@matt-edmondson](https://github.com/matt-edmondson))
- Update LICENSE ([@matt-edmondson](https://github.com/matt-edmondson))
- Create VERSION ([@matt-edmondson](https://github.com/matt-edmondson))
- Make Dictionary.GetOrCreate not return a nullable ([@matt-edmondson](https://github.com/matt-edmondson))
- Update readme ([@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))