X10D 4.0.0-nightly.229

Prefix Reserved
This is a prerelease version of X10D.
There is a newer version of this package available.
See the version list below for details.
dotnet add package X10D --version 4.0.0-nightly.229                
NuGet\Install-Package X10D -Version 4.0.0-nightly.229                
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="X10D" Version="4.0.0-nightly.229" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add X10D --version 4.0.0-nightly.229                
#r "nuget: X10D, 4.0.0-nightly.229"                
#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.
// Install X10D as a Cake Addin
#addin nuget:?package=X10D&version=4.0.0-nightly.229&prerelease

// Install X10D as a Cake Tool
#tool nuget:?package=X10D&version=4.0.0-nightly.229&prerelease                

<h1 align="center"><img src="branding_Banner.png"></h1> <p align="center"> <a href="https://github.com/oliverbooth/X10D/actions/workflows/dotnet.yml"><img src="https://img.shields.io/github/actions/workflow/status/oliverbooth/X10D/dotnet.yml?style=flat-square" alt="GitHub Workflow Status" title="GitHub Workflow Status"></a> <a href="https://github.com/oliverbooth/X10D/issues"><img src="https://img.shields.io/github/issues/oliverbooth/X10D?style=flat-square" alt="GitHub Issues" title="GitHub Issues"></a> <a href="https://sonarcloud.io/dashboard?id=oliverbooth_X10D"><img src="https://img.shields.io/sonar/coverage/oliverbooth_X10D?server=https%3A%2F%2Fsonarcloud.io&style=flat-square" alt="Coverage"></a> <a href="https://www.nuget.org/packages/X10D/"><img src="https://img.shields.io/nuget/dt/X10D?style=flat-square" alt="NuGet Downloads" title="NuGet Downloads"></a> <a href="https://www.nuget.org/packages/X10D/"><img src="https://img.shields.io/nuget/v/X10D?label=stable&style=flat-square" alt="Stable Version" title="Stable Version"></a> <a href="https://www.nuget.org/packages/X10D/"><img src="https://img.shields.io/nuget/vpre/X10D?label=nightly&style=flat-square" alt="Nightly Version" title="Nightly Version"></a> <a href="https://github.com/oliverbooth/X10D/blob/master/LICENSE.md"><img src="https://img.shields.io/github/license/oliverbooth/X10D?style=flat-square" alt="MIT License" title="MIT License"></a> </p>

About

X10D (pronounced extend), is a .NET package that provides extension methods for numerous types. The purpose of this library is to simplify a codebase by reducing the need for repeated code when performing common operations. Simplify your codebase. Take advantage of .NET. Use extension methods.

(I'm also dogfooding this library, so there's that.)

Installation

NuGet installation

Install-Package X10D -Version 3.2.0

Manual installation

Download the latest release from this repository and adding a direct assembly reference for your chosen platform.

Unity installation

For the Unity installation guide, refer to the README.md in X10D.Unity.

Features

I'm planning on writing complete and extensive documentation in the near future. As of this time, feel free to browse the source or the API using your favourite IDE. For those familiar with the 2.6.0 API, please read CHANGELOG.md for a complete list of changes. 3.0.0 is a major release and introduces many breaking changes.

Contributing

Contributions are welcome. See CONTRIBUTING.md.

License

X10D is released under the MIT License. See here for more details.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  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 was computed.  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. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen 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.
  • .NETStandard 2.1

    • No dependencies.
  • net6.0

    • No dependencies.
  • net7.0

    • No dependencies.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on X10D:

Package Downloads
X10D.Unity

Extension methods on crack.

VpSharp

A modern Virtual Paradise SDK wrapper for .NET

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.0.0 258 6/12/2024
4.0.0-nightly.250 50 6/12/2024
4.0.0-nightly.246 107 8/28/2023
4.0.0-nightly.236 126 5/14/2023
4.0.0-nightly.234 123 4/14/2023
4.0.0-nightly.233 79 4/14/2023
4.0.0-nightly.232 294 4/13/2023
4.0.0-nightly.231 88 4/13/2023
4.0.0-nightly.230 80 4/13/2023
4.0.0-nightly.229 85 4/12/2023
4.0.0-nightly.228 85 4/10/2023
4.0.0-nightly.227 98 4/6/2023
4.0.0-nightly.226 86 4/6/2023
4.0.0-nightly.225 90 4/5/2023
3.3.1 676 8/21/2023
3.3.1-nightly.249 78 2/17/2024
3.3.1-nightly.248 62 2/17/2024
3.3.1-nightly.247 54 2/12/2024
3.3.1-nightly.242 69 8/21/2023
3.3.0 169 8/21/2023
3.3.0-nightly.241 74 8/21/2023
3.2.2 704 6/5/2023
3.2.2-nightly.240 89 8/9/2023
3.2.2-nightly.239 79 6/5/2023
3.2.0 528 4/3/2023
3.2.0-nightly.224 97 4/3/2023 3.2.0-nightly.224 is deprecated because it is no longer maintained.
3.2.0-nightly.223 98 4/3/2023 3.2.0-nightly.223 is deprecated because it is no longer maintained.
3.2.0-nightly.222 95 4/3/2023 3.2.0-nightly.222 is deprecated because it is no longer maintained.
3.2.0-nightly.221 98 4/3/2023 3.2.0-nightly.221 is deprecated because it is no longer maintained.
3.2.0-nightly.220 96 4/3/2023 3.2.0-nightly.220 is deprecated because it is no longer maintained.
3.2.0-nightly.219 100 4/3/2023 3.2.0-nightly.219 is deprecated because it is no longer maintained.
3.2.0-nightly.218 102 4/3/2023 3.2.0-nightly.218 is deprecated because it is no longer maintained.
3.2.0-nightly.217 96 4/3/2023 3.2.0-nightly.217 is deprecated because it is no longer maintained.
3.2.0-nightly.216 93 4/3/2023 3.2.0-nightly.216 is deprecated because it is no longer maintained.
3.2.0-nightly.215 101 4/3/2023 3.2.0-nightly.215 is deprecated because it is no longer maintained.
3.2.0-nightly.214 96 4/3/2023 3.2.0-nightly.214 is deprecated because it is no longer maintained.
3.2.0-nightly.213 102 4/3/2023 3.2.0-nightly.213 is deprecated because it is no longer maintained.
3.2.0-nightly.212 107 4/3/2023 3.2.0-nightly.212 is deprecated because it is no longer maintained.
3.2.0-nightly.211 94 4/2/2023 3.2.0-nightly.211 is deprecated because it is no longer maintained.
3.2.0-nightly.210 107 4/2/2023 3.2.0-nightly.210 is deprecated because it is no longer maintained.
3.2.0-nightly.208 96 4/2/2023 3.2.0-nightly.208 is deprecated because it is no longer maintained.
3.2.0-nightly.207 100 4/2/2023 3.2.0-nightly.207 is deprecated because it is no longer maintained.
3.2.0-nightly.206 103 4/2/2023 3.2.0-nightly.206 is deprecated because it is no longer maintained.
3.2.0-nightly.205 101 4/2/2023 3.2.0-nightly.205 is deprecated because it is no longer maintained.
3.2.0-nightly.204 110 4/2/2023 3.2.0-nightly.204 is deprecated because it is no longer maintained.
3.2.0-nightly.203 108 4/2/2023 3.2.0-nightly.203 is deprecated because it is no longer maintained.
3.2.0-nightly.202 107 4/2/2023 3.2.0-nightly.202 is deprecated because it is no longer maintained.
3.2.0-nightly.201 106 4/2/2023 3.2.0-nightly.201 is deprecated because it is no longer maintained.
3.2.0-nightly.200 113 4/2/2023 3.2.0-nightly.200 is deprecated because it is no longer maintained.
3.2.0-nightly.199 102 4/2/2023 3.2.0-nightly.199 is deprecated because it is no longer maintained.
3.2.0-nightly.198 107 4/2/2023 3.2.0-nightly.198 is deprecated because it is no longer maintained.
3.2.0-nightly.197 103 4/2/2023 3.2.0-nightly.197 is deprecated because it is no longer maintained.
3.2.0-nightly.196 95 4/2/2023 3.2.0-nightly.196 is deprecated because it is no longer maintained.
3.2.0-nightly.195 98 4/2/2023 3.2.0-nightly.195 is deprecated because it is no longer maintained.
3.2.0-nightly.193 110 4/2/2023 3.2.0-nightly.193 is deprecated because it is no longer maintained.
3.2.0-nightly.192 105 4/1/2023 3.2.0-nightly.192 is deprecated because it is no longer maintained.
3.2.0-nightly.191 98 4/1/2023 3.2.0-nightly.191 is deprecated because it is no longer maintained.
3.2.0-nightly.190 105 4/1/2023 3.2.0-nightly.190 is deprecated because it is no longer maintained.
3.2.0-nightly.189 93 4/1/2023 3.2.0-nightly.189 is deprecated because it is no longer maintained.
3.2.0-nightly.188 90 4/1/2023 3.2.0-nightly.188 is deprecated because it is no longer maintained.
3.2.0-nightly.186 105 3/31/2023 3.2.0-nightly.186 is deprecated because it is no longer maintained.
3.2.0-nightly.185 95 3/31/2023 3.2.0-nightly.185 is deprecated because it is no longer maintained.
3.2.0-nightly.184 106 3/31/2023 3.2.0-nightly.184 is deprecated because it is no longer maintained.
3.2.0-nightly.183 97 3/31/2023 3.2.0-nightly.183 is deprecated because it is no longer maintained.
3.2.0-nightly.182 90 3/31/2023 3.2.0-nightly.182 is deprecated because it is no longer maintained.
3.2.0-nightly.181 93 3/31/2023 3.2.0-nightly.181 is deprecated because it is no longer maintained.
3.2.0-nightly.180 95 3/31/2023 3.2.0-nightly.180 is deprecated because it is no longer maintained.
3.2.0-nightly.179 94 3/31/2023 3.2.0-nightly.179 is deprecated because it is no longer maintained.
3.2.0-nightly.178 96 3/30/2023 3.2.0-nightly.178 is deprecated because it is no longer maintained.
3.2.0-nightly.177 99 3/30/2023 3.2.0-nightly.177 is deprecated because it is no longer maintained.
3.2.0-nightly.176 92 3/30/2023 3.2.0-nightly.176 is deprecated because it is no longer maintained.
3.2.0-nightly.175 91 3/30/2023 3.2.0-nightly.175 is deprecated because it is no longer maintained.
3.2.0-nightly.174 114 3/29/2023 3.2.0-nightly.174 is deprecated because it is no longer maintained.
3.2.0-nightly.173 107 3/29/2023 3.2.0-nightly.173 is deprecated because it is no longer maintained.
3.2.0-nightly.172 110 3/29/2023 3.2.0-nightly.172 is deprecated because it is no longer maintained.
3.2.0-nightly.171 104 3/28/2023 3.2.0-nightly.171 is deprecated because it is no longer maintained.
3.2.0-nightly.170 96 3/28/2023 3.2.0-nightly.170 is deprecated because it is no longer maintained.
3.2.0-nightly.169 99 3/28/2023 3.2.0-nightly.169 is deprecated because it is no longer maintained.
3.2.0-nightly.168 101 3/28/2023 3.2.0-nightly.168 is deprecated because it is no longer maintained.
3.2.0-nightly.165 117 3/26/2023 3.2.0-nightly.165 is deprecated because it is no longer maintained.
3.2.0-nightly.164 101 3/23/2023 3.2.0-nightly.164 is deprecated because it is no longer maintained.
3.2.0-nightly.163 190 2/28/2023 3.2.0-nightly.163 is deprecated because it is no longer maintained.
3.2.0-nightly.162 96 2/27/2023 3.2.0-nightly.162 is deprecated because it is no longer maintained.
3.2.0-nightly.161 97 2/27/2023 3.2.0-nightly.161 is deprecated because it is no longer maintained.
3.2.0-nightly.160 97 2/27/2023 3.2.0-nightly.160 is deprecated because it is no longer maintained.
3.2.0-nightly.159 96 2/27/2023 3.2.0-nightly.159 is deprecated because it is no longer maintained.
3.2.0-nightly.158 100 2/26/2023 3.2.0-nightly.158 is deprecated because it is no longer maintained.
3.2.0-nightly.157 102 2/26/2023 3.2.0-nightly.157 is deprecated because it is no longer maintained.
3.2.0-nightly.156 98 2/26/2023 3.2.0-nightly.156 is deprecated because it is no longer maintained.
3.2.0-nightly.155 103 2/26/2023 3.2.0-nightly.155 is deprecated because it is no longer maintained.
3.2.0-nightly.154 104 2/26/2023 3.2.0-nightly.154 is deprecated because it is no longer maintained.
3.2.0-nightly.153 96 2/26/2023 3.2.0-nightly.153 is deprecated because it is no longer maintained.
3.2.0-nightly.152 229 2/19/2023 3.2.0-nightly.152 is deprecated because it is no longer maintained.
3.2.0-nightly.151 113 2/5/2023 3.2.0-nightly.151 is deprecated because it is no longer maintained.
3.2.0-nightly.150 126 12/31/2022 3.2.0-nightly.150 is deprecated because it is no longer maintained.
3.2.0-nightly.149 144 12/22/2022 3.2.0-nightly.149 is deprecated because it is no longer maintained.
3.2.0-nightly.148 104 12/22/2022 3.2.0-nightly.148 is deprecated because it is no longer maintained.
3.2.0-nightly.147 192 12/21/2022 3.2.0-nightly.147 is deprecated because it is no longer maintained.
3.2.0-nightly.145 148 12/6/2022 3.2.0-nightly.145 is deprecated because it is no longer maintained.
3.2.0-nightly.144 156 12/1/2022 3.2.0-nightly.144 is deprecated because it is no longer maintained.
3.2.0-nightly.143 111 12/1/2022 3.2.0-nightly.143 is deprecated because it is no longer maintained.
3.2.0-nightly.142 119 11/29/2022 3.2.0-nightly.142 is deprecated because it is no longer maintained.
3.2.0-nightly.141 125 11/29/2022 3.2.0-nightly.141 is deprecated because it is no longer maintained.
3.2.0-nightly.140 119 11/29/2022 3.2.0-nightly.140 is deprecated because it is no longer maintained.
3.2.0-nightly.139 118 11/29/2022 3.2.0-nightly.139 is deprecated because it is no longer maintained.
3.2.0-nightly.136 125 11/29/2022 3.2.0-nightly.136 is deprecated because it is no longer maintained.
3.2.0-nightly.135 109 11/28/2022 3.2.0-nightly.135 is deprecated because it is no longer maintained.
3.2.0-nightly.134 126 11/26/2022 3.2.0-nightly.134 is deprecated because it is no longer maintained.
3.2.0-nightly.133 416 7/30/2022 3.2.0-nightly.133 is deprecated because it is no longer maintained.
3.2.0-nightly.132 219 7/23/2022 3.2.0-nightly.132 is deprecated because it is no longer maintained.
3.2.0-nightly.131 118 7/23/2022 3.2.0-nightly.131 is deprecated because it is no longer maintained.
3.2.0-nightly.130 131 7/21/2022 3.2.0-nightly.130 is deprecated because it is no longer maintained.
3.2.0-nightly.129 130 7/21/2022 3.2.0-nightly.129 is deprecated because it is no longer maintained.
3.2.0-nightly.128 132 7/21/2022 3.2.0-nightly.128 is deprecated because it is no longer maintained.
3.2.0-nightly.127 119 7/20/2022 3.2.0-nightly.127 is deprecated because it is no longer maintained.
3.2.0-nightly.126 178 7/14/2022 3.2.0-nightly.126 is deprecated because it is no longer maintained.
3.2.0-nightly.125 150 7/14/2022 3.2.0-nightly.125 is deprecated because it is no longer maintained.
3.2.0-nightly.124 129 7/13/2022 3.2.0-nightly.124 is deprecated because it is no longer maintained.
3.2.0-nightly.123 137 7/13/2022 3.2.0-nightly.123 is deprecated because it is no longer maintained.
3.2.0-nightly.122 134 7/13/2022 3.2.0-nightly.122 is deprecated because it is no longer maintained.
3.2.0-nightly.121 133 7/8/2022 3.2.0-nightly.121 is deprecated because it is no longer maintained.
3.2.0-nightly.120 123 7/8/2022 3.2.0-nightly.120 is deprecated because it is no longer maintained.
3.2.0-nightly.119 129 7/5/2022 3.2.0-nightly.119 is deprecated because it is no longer maintained.
3.2.0-nightly.118 125 6/29/2022 3.2.0-nightly.118 is deprecated because it is no longer maintained.
3.2.0-nightly.117 137 6/21/2022 3.2.0-nightly.117 is deprecated because it is no longer maintained.
3.2.0-nightly.116 124 6/3/2022 3.2.0-nightly.116 is deprecated because it is no longer maintained.
3.2.0-nightly.115 130 6/2/2022 3.2.0-nightly.115 is deprecated because it is no longer maintained.
3.2.0-nightly.114 126 6/1/2022 3.2.0-nightly.114 is deprecated because it is no longer maintained.
3.2.0-nightly.113 119 6/1/2022 3.2.0-nightly.113 is deprecated because it is no longer maintained.
3.2.0-nightly.112 121 6/1/2022 3.2.0-nightly.112 is deprecated because it is no longer maintained.
3.2.0-nightly.111 129 5/31/2022 3.2.0-nightly.111 is deprecated because it is no longer maintained.
3.2.0-nightly.109 123 5/23/2022 3.2.0-nightly.109 is deprecated because it is no longer maintained.
3.2.0-nightly.108 126 5/18/2022 3.2.0-nightly.108 is deprecated because it is no longer maintained.
3.2.0-nightly.107 128 5/16/2022 3.2.0-nightly.107 is deprecated because it is no longer maintained.
3.2.0-nightly.106 129 5/16/2022 3.2.0-nightly.106 is deprecated because it is no longer maintained.
3.1.0 787 5/13/2022 3.1.0 is deprecated because it is no longer maintained.
3.1.0-nightly.104 132 5/13/2022 3.1.0-nightly.104 is deprecated because it is no longer maintained.
3.1.0-nightly.102 136 5/12/2022 3.1.0-nightly.102 is deprecated because it is no longer maintained.
3.1.0-nightly.101 130 5/9/2022 3.1.0-nightly.101 is deprecated because it is no longer maintained.
3.1.0-nightly.100 133 5/9/2022 3.1.0-nightly.100 is deprecated because it is no longer maintained.
3.1.0-nightly.99 131 5/9/2022 3.1.0-nightly.99 is deprecated because it is no longer maintained.
3.1.0-nightly.98 130 5/9/2022 3.1.0-nightly.98 is deprecated because it is no longer maintained.
3.1.0-nightly.97 117 5/8/2022 3.1.0-nightly.97 is deprecated because it is no longer maintained.
3.1.0-nightly.96 131 5/8/2022 3.1.0-nightly.96 is deprecated because it is no longer maintained.
3.1.0-nightly.95 121 5/8/2022 3.1.0-nightly.95 is deprecated because it is no longer maintained.
3.1.0-nightly.94 133 5/8/2022 3.1.0-nightly.94 is deprecated because it is no longer maintained.
3.1.0-nightly.92 122 5/8/2022 3.1.0-nightly.92 is deprecated because it is no longer maintained.
3.1.0-nightly.91 118 5/7/2022 3.1.0-nightly.91 is deprecated because it is no longer maintained.
3.1.0-nightly.90 125 5/7/2022 3.1.0-nightly.90 is deprecated because it is no longer maintained.
3.1.0-nightly.89 126 5/5/2022 3.1.0-nightly.89 is deprecated because it is no longer maintained.
3.1.0-nightly.88 128 5/4/2022 3.1.0-nightly.88 is deprecated because it is no longer maintained.
3.1.0-nightly.87 126 5/2/2022 3.1.0-nightly.87 is deprecated because it is no longer maintained.
3.1.0-nightly.86 166 5/1/2022 3.1.0-nightly.86 is deprecated because it is no longer maintained.
3.0.0 472 4/30/2022 3.0.0 is deprecated because it is no longer maintained.
3.0.0-nightly.103 131 5/12/2022 3.0.0-nightly.103 is deprecated because it is no longer maintained.
3.0.0-nightly.93 132 5/8/2022 3.0.0-nightly.93 is deprecated because it is no longer maintained.
3.0.0-nightly.85 120 4/30/2022 3.0.0-nightly.85 is deprecated because it is no longer maintained.
3.0.0-nightly.84 124 4/30/2022 3.0.0-nightly.84 is deprecated because it is no longer maintained.
3.0.0-nightly.83 128 4/30/2022 3.0.0-nightly.83 is deprecated because it is no longer maintained.
3.0.0-nightly.82 129 4/30/2022 3.0.0-nightly.82 is deprecated because it is no longer maintained.
3.0.0-nightly.81 131 4/30/2022 3.0.0-nightly.81 is deprecated because it is no longer maintained.
3.0.0-nightly.80 128 4/30/2022 3.0.0-nightly.80 is deprecated because it is no longer maintained.
3.0.0-nightly.79 129 4/30/2022 3.0.0-nightly.79 is deprecated because it is no longer maintained.
3.0.0-nightly.78 122 4/30/2022 3.0.0-nightly.78 is deprecated because it is no longer maintained.
3.0.0-nightly.77 140 4/30/2022 3.0.0-nightly.77 is deprecated because it is no longer maintained.
3.0.0-nightly.76 125 4/29/2022 3.0.0-nightly.76 is deprecated because it is no longer maintained.
3.0.0-nightly.75 133 4/29/2022 3.0.0-nightly.75 is deprecated because it is no longer maintained.
3.0.0-nightly.74 123 4/29/2022 3.0.0-nightly.74 is deprecated because it is no longer maintained.
3.0.0-nightly.73 119 4/29/2022 3.0.0-nightly.73 is deprecated because it is no longer maintained.
3.0.0-nightly.72 125 4/29/2022 3.0.0-nightly.72 is deprecated because it is no longer maintained.
3.0.0-nightly.71 125 4/29/2022 3.0.0-nightly.71 is deprecated because it is no longer maintained.
3.0.0-nightly.70 137 4/28/2022 3.0.0-nightly.70 is deprecated because it is no longer maintained.
3.0.0-nightly.69 120 4/28/2022 3.0.0-nightly.69 is deprecated because it is no longer maintained.
3.0.0-nightly.68 133 4/28/2022 3.0.0-nightly.68 is deprecated because it is no longer maintained.
3.0.0-nightly.67 133 4/28/2022 3.0.0-nightly.67 is deprecated because it is no longer maintained.
3.0.0-nightly.66 117 4/27/2022 3.0.0-nightly.66 is deprecated because it is no longer maintained.
3.0.0-nightly.65 121 4/27/2022 3.0.0-nightly.65 is deprecated because it is no longer maintained.
3.0.0-nightly.64 121 4/26/2022 3.0.0-nightly.64 is deprecated because it is no longer maintained.
3.0.0-nightly.63 134 4/26/2022 3.0.0-nightly.63 is deprecated because it is no longer maintained.
3.0.0-nightly.60 132 4/26/2022 3.0.0-nightly.60 is deprecated because it is no longer maintained.
3.0.0-nightly.59 133 4/26/2022 3.0.0-nightly.59 is deprecated because it is no longer maintained.
3.0.0-nightly.58 128 4/26/2022 3.0.0-nightly.58 is deprecated because it is no longer maintained.
3.0.0-nightly.57 135 4/25/2022 3.0.0-nightly.57 is deprecated because it is no longer maintained.
3.0.0-nightly.52 130 4/25/2022 3.0.0-nightly.52 is deprecated because it is no longer maintained.
3.0.0-nightly.51 128 4/25/2022 3.0.0-nightly.51 is deprecated because it is no longer maintained.
3.0.0-nightly.50 126 4/25/2022 3.0.0-nightly.50 is deprecated because it is no longer maintained.
3.0.0-nightly.49 130 4/24/2022 3.0.0-nightly.49 is deprecated because it is no longer maintained.
3.0.0-nightly.47 127 4/24/2022 3.0.0-nightly.47 is deprecated because it is no longer maintained.
3.0.0-nightly.46 129 4/24/2022 3.0.0-nightly.46 is deprecated because it is no longer maintained.
3.0.0-nightly.45 125 4/23/2022 3.0.0-nightly.45 is deprecated because it is no longer maintained.
3.0.0-nightly.44 130 4/23/2022 3.0.0-nightly.44 is deprecated because it is no longer maintained.
3.0.0-nightly.43 131 4/23/2022 3.0.0-nightly.43 is deprecated because it is no longer maintained.
3.0.0-nightly.42 130 4/22/2022 3.0.0-nightly.42 is deprecated because it is no longer maintained.
3.0.0-nightly.36 132 4/21/2022 3.0.0-nightly.36 is deprecated because it is no longer maintained.
3.0.0-nightly.35 135 4/21/2022 3.0.0-nightly.35 is deprecated because it is no longer maintained.
3.0.0-nightly.34 134 4/21/2022 3.0.0-nightly.34 is deprecated because it is no longer maintained.
3.0.0-nightly.33 126 4/21/2022 3.0.0-nightly.33 is deprecated because it is no longer maintained.
3.0.0-nightly.32 131 4/21/2022 3.0.0-nightly.32 is deprecated because it is no longer maintained.
3.0.0-nightly.31 143 4/21/2022 3.0.0-nightly.31 is deprecated because it is no longer maintained.
3.0.0-nightly.29 131 4/21/2022 3.0.0-nightly.29 is deprecated because it is no longer maintained.
3.0.0-nightly.28 123 4/21/2022 3.0.0-nightly.28 is deprecated because it is no longer maintained.
3.0.0-nightly.27 133 4/21/2022 3.0.0-nightly.27 is deprecated because it is no longer maintained.
3.0.0-nightly.26 127 4/21/2022 3.0.0-nightly.26 is deprecated because it is no longer maintained.
3.0.0-nightly.25 137 4/21/2022 3.0.0-nightly.25 is deprecated because it is no longer maintained.
3.0.0-nightly.24 129 4/21/2022 3.0.0-nightly.24 is deprecated because it is no longer maintained.
3.0.0-nightly.23 136 4/21/2022 3.0.0-nightly.23 is deprecated because it is no longer maintained.
3.0.0-nightly.22 136 4/21/2022 3.0.0-nightly.22 is deprecated because it is no longer maintained.
3.0.0-nightly.21 137 4/20/2022 3.0.0-nightly.21 is deprecated because it is no longer maintained.
3.0.0-nightly.20 123 4/20/2022 3.0.0-nightly.20 is deprecated because it is no longer maintained.
3.0.0-nightly.19 136 4/20/2022 3.0.0-nightly.19 is deprecated because it is no longer maintained.
3.0.0-nightly.14 131 4/20/2022 3.0.0-nightly.14 is deprecated because it is no longer maintained.
3.0.0-nightly.13 128 4/20/2022 3.0.0-nightly.13 is deprecated because it is no longer maintained.
3.0.0-nightly.12 132 4/20/2022 3.0.0-nightly.12 is deprecated because it is no longer maintained.
3.0.0-nightly.11 130 4/20/2022 3.0.0-nightly.11 is deprecated because it is no longer maintained.
3.0.0-nightly.10 131 4/20/2022 3.0.0-nightly.10 is deprecated because it is no longer maintained.
3.0.0-nightly.9 125 4/20/2022 3.0.0-nightly.9 is deprecated because it is no longer maintained.
3.0.0-nightly.8 134 4/20/2022 3.0.0-nightly.8 is deprecated because it is no longer maintained.
3.0.0-nightly.7 129 4/20/2022 3.0.0-nightly.7 is deprecated because it is no longer maintained.
3.0.0-nightly.6 127 4/20/2022 3.0.0-nightly.6 is deprecated because it is no longer maintained.
3.0.0-nightly.5 125 4/20/2022 3.0.0-nightly.5 is deprecated because it is no longer maintained.
3.0.0-nightly.4 126 4/20/2022 3.0.0-nightly.4 is deprecated because it is no longer maintained.
3.0.0-nightly.3 132 4/20/2022 3.0.0-nightly.3 is deprecated because it is no longer maintained.
3.0.0-nightly.2 127 4/20/2022 3.0.0-nightly.2 is deprecated because it is no longer maintained.
2.6.0 762 10/20/2020 2.6.0 is deprecated because it is no longer maintained.
2.5.0 717 7/15/2020 2.5.0 is deprecated because it is no longer maintained.
2.4.0 711 7/13/2020 2.4.0 is deprecated because it is no longer maintained.
2.3.0 715 7/9/2020 2.3.0 is deprecated because it is no longer maintained.
2.2.0 507 4/21/2020 2.2.0 is deprecated because it is no longer maintained.
2.1.0 644 4/18/2020 2.1.0 is deprecated because it is no longer maintained.

# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 4.0.0 - [Unreleased]

### Added

- X10D: Added extension methods for `DateOnly`, for parity with `DateTime` and `DateTimeOffset`.
- X10D: Added math-related extension methods for `BigInteger`.
- X10D: Added `Span<T>.Replace(T, T)`.
- X10D: Added `CountDigits` for integer types.
- X10D: Added `Progress<T>.OnProgressChanged([T])`;
- X10D: Added `TextWriter.WriteNoAlloc(int[, ReadOnlySpan<char>[, IFormatProvider]])`.
- X10D: Added `TextWriter.WriteNoAlloc(uint[, ReadOnlySpan<char>[, IFormatProvider]])`.
- X10D: Added `TextWriter.WriteNoAlloc(long[, ReadOnlySpan<char>[, IFormatProvider]])`.
- X10D: Added `TextWriter.WriteNoAlloc(ulong[, ReadOnlySpan<char>[, IFormatProvider]])`.
- X10D: Added `TextWriter.WriteLineNoAlloc(int[, ReadOnlySpan<char>[, IFormatProvider]])`.
- X10D: Added `TextWriter.WriteLineNoAlloc(uint[, ReadOnlySpan<char>[, IFormatProvider]])`.
- X10D: Added `TextWriter.WriteLineNoAlloc(long[, ReadOnlySpan<char>[, IFormatProvider]])`.
- X10D: Added `TextWriter.WriteLineNoAlloc(ulong[, ReadOnlySpan<char>[, IFormatProvider]])`.
- X10D.Unity: Added `RaycastHit.GetComponent` and `RaycastHit.TryGetComponent`.

### Changed

- X10D: `DateTime.Age(DateTime)` and `DateTimeOffset.Age(DateTimeOffset)` parameter renamed from `asOf` to `referenceDate`.

## [3.2.0] - 2023-04-03

### Added

- Added new library X10D.DSharpPlus.
- Added new library X10D.Hosting.
- Added .NET 7 target.
- X10D: Added `IntrinsicExtensions` and `IntrinsicUtility` which offer methods for vectors in `System.Runtime.Instrinsics`. (#70)
- X10D: Added `MathUtility.Bias(float, float)` and `MathUtility.Bias(double, double)`.
- X10D: Added `MathUtility.ExponentialDecay(float, float, float)` and `MathUtility.ExponentialDecay(double, double, double)`.
- X10D: Added `MathUtility.InverseLerp(float, float, float)` and `MathUtility.InverseLerp(double, double, double)`.
- X10D: Added `MathUtility.Pulse(float, float, float)` and `MathUtility.Pulse(double, double, double)`.
- X10D: Added `MathUtility.Sawtooth(float)` and `MathUtility.Sawtooth(double)`.
- X10D: Added `MathUtility.ScaleRange(float, float, float, float, float)`
 and `MathUtility.ScaleRange(double, double, double, double, double)`
- X10D: Added `MathUtility.Sigmoid(float)` and `MathUtility.Sigmoid(double)`.
- X10D: Added `MathUtility.SmoothStep(float, float, float)` and `MathUtility.SmoothStep(double, double, double)`.
- X10D: Added `Circle`, `CircleF`, `Cuboid`, `Ellipse`, `EllipseF`, `Line3D`, `Line`, `LineF`, `Polygon`, `PolygonF`, `Polyhedron`,
 and `Sphere`, to complement System.Drawing structs such as `Point` and `Rectangle`.
- X10D: Added `Color.Deconstruct()` - with optional alpha parameter.
- X10D: Added `Color.GetClosestConsoleColor()`.
- X10D: Added `DateTime.GetIso8601WeekOfYear()` and `DateTimeOffset.GetIso8601WeekOfYear()`.
- X10D: Added `DirectoryInfo.Clear()`.
- X10D: Added `double.LinearToGamma([gamma])` and `float.LinearToGamma([gamma])`. (#60)
- X10D: Added `double.GammaToLinear([gamma])` and `float.GammaToLinear([gamma])`. (#60)
- X10D: Added `GreatestCommonFactor` for built-in integer types.
- X10D: Added `IEnumerable<T>.ConcatOne(T)`.
- X10D: Added `IEnumerable<T>.CountWhereNot(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.FirstWhereNot(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.FirstWhereNotOrDefault(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.LastWhereNot(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.LastWhereNotOrDefault(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.MinMax()` and `IEnumerable<T>.MinMaxBy()`. (#72)
- X10D: Added `IEnumerable<T>.WhereNot(Func<T, bool>)`.
- X10D: Added `IEnumerable<T>.WhereNotNull()`.
- X10D: Added `IEnumerable<string>.Grep(string[, bool])`.
- X10D: Added `IList<T>.RemoveRange(Range)`.
- X10D: Added `IList<T>.Swap(IList<T>)`. (#62)
- X10D: Added `IReadOnlyList<T>.IndexOf(T[, int[, int]])`.
- X10D: Added `IReadOnlyList<T>.Slice(int[, int]])`.
- X10D: Added `LowestCommonMultiple` for built-in integer types.
- X10D: Added `Wrap(T[, T])` for built-in numeric types. (#60)
- X10D: Added `Nullable<T>.TryGetValue(out T)`. (#61)
- X10D: Added `Point.IsOnLine(LineF)`, `Point.IsOnLine(PointF, PointF)`, and `Point.IsOnLine(Vector2, Vector2)`.
- X10D: Added `PointF.IsOnLine(LineF)`, `PointF.IsOnLine(PointF, PointF)`, and `PointF.IsOnLine(Vector2, Vector2)`.
- X10D: Added `Point.ToSize()`.
- X10D: Added `Point.ToSizeF()`.
- X10D: Added `Point.ToVector2()`.
- X10D: Added `PointF.Round([float])`.
- X10D: Added `PointF.ToSizeF()`.
- X10D: Added `PointF.ToVector2()` for .NET < 6.
- X10D: Added `PopCount()` for built-in integer types.
- X10D: Added `Quaternion.ToAxisAngle(out float, out float)`.
- X10D: Added `Quaternion.ToVector3()`.
- X10D: Added `Random.NextFrom(Span<T>)` and `Random.NextFrom(ReadOnlySpan<T>)`.
- X10D: Added `ReadOnlySpan<char>.CountSubstring(char)`.
- X10D: Added `ReadOnlySpan<char>.CountSubstring(ReadOnlySpan<char>[, StringComparison])`.
- X10D: Added `ReadOnlySpan<char>.ToTimeSpan()`.
- X10D: Added `ReadOnlySpan<T>.Split(T)`.
- X10D: Added `ReadOnlySpan<T>.Split(ReadOnlySpan<T>)`.
- X10D: Added `RoundUpToPowerOf2()` for built-in integer types.
- X10D: Added `Saturate()` for built-in floating-point types.
- X10D: Added `Size.ToPoint()`.
- X10D: Added `Size.ToPointF()`.
- X10D: Added `Size.ToVector2()`.
- X10D: Added `Span<char>.CountSubstring(char)`.
- X10D: Added `Span<char>.CountSubstring(Span<char>[, StringComparison])`.
- X10D: Added `Span<T>.Split(T)`.
- X10D: Added `Span<T>.Split(Span<T>)`.
- X10D: Added `string.CountSubstring(char)`.
- X10D: Added `string.CountSubstring(string[, StringComparison])`.
- X10D: Added `string.EnsureStartsWith()` and `string.EnsureEndsWith()`.
- X10D: Added `string.IsEmpty()`.
- X10D: Added `string.IsWhiteSpace()`.
- X10D: Added `string.IsNullOrEmpty()`.
- X10D: Added `string.IsNullOrWhiteSpace()`.
- X10D: Added `TextReader.EnumerateLines()` and `TextReader.EnumerateLinesAsync()`.
- X10D: Added `TimeSpan.TryParse(ReadOnlySpan<char>, out TimeSpan)`.
- X10D: Added `Quaternion.Multiply(Vector3)` - this functions as an equivalent to Unity's `Quaternion * Vector3` operator.
- X10D: Added `Vector2.Deconstruct()`.
- X10D: Added `Vector2.IsOnLine(LineF)`, `Vector2.IsOnLine(PointF, PointF)`, and `Vector2.IsOnLine(Vector2, Vector2)`.
- X10D: Added `Vector2.Round([float])`.
- X10D: Added `Vector2.ToPointF()`.
- X10D: Added `Vector2.ToSizeF()`.
- X10D: Added `Vector3.Deconstruct()`.
- X10D: Added `Vector3.Round([float])`.
- X10D: Added `Vector4.Deconstruct()`.
- X10D: Added `Vector4.Round([float])`.
- X10D: `ComplexSqrt` is now exposed for all frameworks.
- X10D.Unity: Added `DebugUtility`, which mimics `UnityEngine.Debug` while offering more useful primitive drawing methods.
- X10D.Unity: Added `System.Drawing.Color.ToUnityColor()`.
- X10D.Unity: Added `System.Drawing.Color.ToUnityColor32()`.
- X10D.Unity: Added `Color.Deconstruct()` - with optional alpha parameter.
- X10D.Unity: Added `Color.GetClosestConsoleColor()`.
- X10D.Unity: Added `Color.ToSystemDrawingColor()`.
- X10D.Unity: Added `Color32.Deconstruct()` - with optional alpha parameter.
- X10D.Unity: Added `Color32.GetClosestConsoleColor()`.
- X10D.Unity: Added `Color32.ToSystemDrawingColor()`.
- X10D.Unity: Added `Point.ToUnityVector2()`.
- X10D.Unity: Added `Point.ToUnityVector2Int()`.
- X10D.Unity: Added `PointF.ToUnityVector2()`.
- X10D.Unity: Added `Rect.ToSystemRectangleF()`.
- X10D.Unity: Added `RectInt.ToSystemRectangle()`.
- X10D.Unity: Added `RectInt.ToSystemRectangleF()`.
- X10D.Unity: Added `Rectangle.ToUnityRect()`.
- X10D.Unity: Added `Rectangle.ToUnityRectInt()`.
- X10D.Unity: Added `RectangleF.ToUnityRect()`.
- X10D.Unity: Added `Size.ToUnityVector2()`.
- X10D.Unity: Added `Size.ToUnityVector2Int()`.
- X10D.Unity: Added `SizeF.ToUnityVector2()`.
- X10D.Unity: Added `Vector2.Deconstruct()`.
- X10D.Unity: Added `Vector2.IsOnLine(LineF)`, `Vector2.IsOnLine(PointF, PointF)`, and `Vector2.IsOnLine(Vector2, Vector2)`.
- X10D.Unity: Added `Vector2Int.IsOnLine(LineF)`, `Vector2Int.IsOnLine(PointF, PointF)`, `Vector2Int.IsOnLine(Vector2, Vector2)`,
 and `Vector2Int.IsOnLine(Vector2Int, Vector2Int)`.
- X10D.Unity: Added `Vector2.Round([float])`.
- X10D.Unity: Added `Vector2.ToSystemPointF()`.
- X10D.Unity: Added `Vector2.ToSystemSizeF()`.
- X10D.Unity: Added `Vector2Int.Deconstruct()`.
- X10D.Unity: Added `Vector2Int.ToSystemPoint()`.
- X10D.Unity: Added `Vector2Int.ToSystemSize()`.
- X10D.Unity: Added `Vector2Int.ToSystemVector()`.
- X10D.Unity: Added `Vector2Int.WithX()`.
- X10D.Unity: Added `Vector2Int.WithY()`.
- X10D.Unity: Added `Vector3.Deconstruct()`.
- X10D.Unity: Added `Vector3.Round([float])`.
- X10D.Unity: Added `Vector3Int.Deconstruct()`.
- X10D.Unity: Added `Vector3Int.ToSystemVector()`.
- X10D.Unity: Added `Vector3Int.WithX()`.
- X10D.Unity: Added `Vector3Int.WithY()`.
- X10D.Unity: Added `Vector3Int.WithZ()`.
- X10D.Unity: Added `Vector4.Deconstruct()`.
- X10D.Unity: Added `Vector4.Round([float])`
- X10D.Unity: Added `WaitForFrames` yield instruction.
- X10D.Unity: Added `WaitForKeyDown` yield instruction.
- X10D.Unity: Added `WaitForKeyUp` yield instruction.
- X10D.Unity: Added `WaitForSecondsNoAlloc` yield instruction.
- X10D.Unity: Added `WaitForSecondsRealtimeNoAlloc` yield instruction.
- X10D.Unity: Added `WaitForTimeSpanNoAlloc` yield instruction.
- X10D.Unity: Added `WaitForTimeSpanRealtimeNoAlloc` yield instruction.

### Fixed

- X10D: `T[].Clear` will now correctly clear the specified range of elements by
 using the [GetOffsetAndLength](https://learn.microsoft.com/en-us/dotnet/api/system.range.getoffsetandlength?view=net-7.0)
 method.
- X10D: `Stream.ReadSingle(Endianness)` now returns a float instead of a double.
- X10D: Fixed `Stream.ReadDouble(Endianness)`, `Stream.ReadSingle(Endianness)`, `Stream.WriteDouble(double, Endianness)`,
 `Stream.WriteSingle(float, Endianness)` writing and reading the wrong endianness.

### Changed

- X10D: Performance for integer `Unpack` has been dramatically improved using vector parallelization. (#70)
- X10D: Performance for `MemberInfo.HasCustomAttribute` has been improved. (#70)
- X10D: Performance for `Rune.Repeat` has been improved. (#70)
- X10D: `TimeSpanParser.TryParse` now accepts a nullable string, and returns false if this input is null or empty.
- X10D.Unity: `Singleton<T>` now caches instance where possible.
- X10D.Unity: Conversions between equivalent structures in `System.Numerics` and `UnityEngine` now make use of "unsafe"
 reinterpretation, rather than constructing new instances. (#70)

## [3.1.0] - 2022-05-13

### Added

- Reintroduced Unity support
- X10D: Added `Color.Inverted()`. (#54)
- X10D: Added `Color.WithA()`. (#55)
- X10D: Added `Color.WithB()`. (#55)
- X10D: Added `Color.WithG()`. (#55)
- X10D: Added `Color.WithR()`. (#55)
- X10D: Added `ICollection<T>.ClearAndDisposeAll()`.
- X10D: Added `ICollection<T>.ClearAndDisposeAllAsync()`.
- X10D: Added `IEnumerable<T>.For()`. (#50)
- X10D: Added `IEnumerable<T>.ForEach()`. (#50)
- X10D: Added `IEnumerable<T>.DisposeAll()`.
- X10D: Added `IEnumerable<T>.DisposeAllAsync()`.
- X10D: Added `char.IsEmoji`.
- X10D: Added `ReadOnlySpan<T>.Count(Predicate<T>)`.
- X10D: Added `Rune.IsEmoji`.
- X10D: Added `Span<T>.Count(Predicate<T>)`.
- X10D: Added `string.IsEmoji`.
- X10D: Added `Vector2.WithX()`. (#56)
- X10D: Added `Vector2.WithY()`. (#56)
- X10D: Added `Vector3.WithX()`. (#56)
- X10D: Added `Vector3.WithY()`. (#56)
- X10D: Added `Vector3.WithZ()`. (#56)
- X10D: Added `Vector4.WithX()`. (#56)
- X10D: Added `Vector4.WithY()`. (#56)
- X10D: Added `Vector4.WithZ()`. (#56)
- X10D: Added `Vector4.WithW()`. (#56)
- X10D.Unity: Added `Singleton<T>` class.
- X10D.Unity: Added `Color.Inverted()`. (#54)
- X10D.Unity: Added `Color.WithA()`. (#55)
- X10D.Unity: Added `Color.WithB()`. (#55)
- X10D.Unity: Added `Color.WithG()`. (#55)
- X10D.Unity: Added `Color.WithR()`. (#55)
- X10D.Unity: Added `Color32.Inverted()`. (#54)
- X10D.Unity: Added `Color32.WithA()`. (#55)
- X10D.Unity: Added `Color32.WithB()`. (#55)
- X10D.Unity: Added `Color32.WithG()`. (#55)
- X10D.Unity: Added `Color32.WithR()`. (#55)
- X10D.Unity: Added `Component.GetComponentsInChildrenOnly<T>()`.
- X10D.Unity: Added `GameObject.GetComponentsInChildrenOnly<T>()`.
- X10D.Unity: Added `GameObject.LookAt(GameObject[, Vector3])`.
- X10D.Unity: Added `GameObject.LookAt(Transform[, Vector3])`.
- X10D.Unity: Added `GameObject.LookAt(Vector3[, Vector3])`.
- X10D.Unity: Added `GameObject.SetLayerRecursively(int)`. (#57)
- X10D.Unity: Added `GameObject.SetParent(GameObject[, bool])`.
- X10D.Unity: Added `GameObject.SetParent(Transform[, bool])`.
- X10D.Unity: Added `System.Numerics.Quaternion.ToUnityQuaternion()`.
- X10D.Unity: Added `Quaternion.ToSystemQuaternion()`.
- X10D.Unity: Added `Random.NextColorArgb()`.
- X10D.Unity: Added `Random.NextColor32Argb()`.
- X10D.Unity: Added `Random.NextColorRgb()`.
- X10D.Unity: Added `Random.NextColor32Rgb()`.
- X10D.Unity: Added `Random.NextRotation()`.
- X10D.Unity: Added `Random.NextRotationUniform()`.
- X10D.Unity: Added `Random.NextUnitVector2()`.
- X10D.Unity: Added `Random.NextUnitVector3()`.
- X10D.Unity: Added `Transform.LookAt(GameObject[, Vector3])`.
- X10D.Unity: Added `Transform.SetParent(GameObject[, bool])`.
- X10D.Unity: Added `System.Numerics.Vector2.ToUnityVector()`.
- X10D.Unity: Added `System.Numerics.Vector3.ToUnityVector()`.
- X10D.Unity: Added `System.Numerics.Vector4.ToUnityVector()`.
- X10D.Unity: Added `Vector2.ToSystemVector()`.
- X10D.Unity: Added `Vector3.ToSystemVector()`.
- X10D.Unity: Added `Vector4.ToSystemVector()`.
- X10D.Unity: Added `Vector2.WithX()`. (#56)
- X10D.Unity: Added `Vector2.WithY()`. (#56)
- X10D.Unity: Added `Vector3.WithX()`. (#56)
- X10D.Unity: Added `Vector3.WithY()`. (#56)
- X10D.Unity: Added `Vector3.WithZ()`. (#56)
- X10D.Unity: Added `Vector4.WithX()`. (#56)
- X10D.Unity: Added `Vector4.WithY()`. (#56)
- X10D.Unity: Added `Vector4.WithZ()`. (#56)
- X10D.Unity: Added `Vector4.WithW()`. (#56)

## [3.0.0] - 2022-04-30

In the midst of writing these release notes, I may have missed some important changes. If you notice an API change that is not
documented here,
please [open an issue](https://github.com/oliverbooth/X10D/issues)!

### Added

- Added `T.AsArrayValue()`.
- Added `T.AsEnumerableValue()`.
- Added `T.RepeatValue(int)`.
- Added `T.ToJson([JsonSerializerOptions])`.
- Added `string.FromJson([JsonSerializerOptions])`.
- Added `T[].AsReadOnly()`.
- Added `T[].Clear([Range])` and `T[].Clear(int, int)`.
- Added `DateTime.IsLeapYear()`.
- Added `DateTimeOffset.IsLeapYear()`.
- Added `Endianness` enum.
- Added `FileInfo.GetHash<T>()`.
- Added `FileInfo.TryWriteHash<T>(Span<byte>, out int)`.
- Added `IComparable<T>.Clamp(T, T)` - this supersedes `Clamp` defined for hard-coded numeric types. (#24)
- Added `IComparable<T1>.GreaterThan(T2)`. (#22)
- Added `IComparable<T1>.GreaterThanOrEqualTo(T2)`. (#22)
- Added `IComparable<T1>.LessThan(T2)`. (#22)
- Added `IComparable<T1>.LessThanOrEqualTo(T2)`. (#22)
- Added `IComparable<T1>.Max(T)`. (#23)
- Added `IComparable<T1>.Min(T)`. (#23)
- Added `IDictionary<TKey, TValue>.AddOrUpdate()`
- Added `IEnumerable<TSource>.Product()` and `IEnumerable<TSource>.Product<TResult>(Func<TSource>, TResult)` for all built-in
 numeric types, computing the product of all (optionally transformed) elements.
- Added `IList<T>.Fill(T)` and `IList<T>.Fill(T, int, int)`.
- Added `IPAddress.IsIPv4()` and `IPAddress.IsIPv6()`.
- Added `IReadOnlyList<byte>.Pack8Bit()`.
- Added `IReadOnlyList<byte>.Pack16Bit()`.
- Added `IReadOnlyList<byte>.Pack32Bit()`.
- Added `IReadOnlyList<byte>.Pack64Bit()`.
- Added `MemberInfo.HasCustomAttribute<T>()` and `MemberInfo.HasCustomAttribute(Type)`.
- Added `defaultValue` overload for `MemberInfo.SelectFromCustomAttribute<TAttr, TReturn>()`.
- Added `Random.Next<T>()` (returns a random field from a specified enum type).
- Added `Random.NextByte([byte[, byte]])`.
- Added `Random.NextColorArgb()`, returning a random color in RGB space, including random alpha.
- Added `Random.NextColorRgb()`, returning a random color in RGB space with alpha 255.
- Added `Random.NextDouble(double[, double])`.
- Added `Random.NextInt16([short[, short]])`.
- Added `Random.NextSingle(float[, float])`. (#34)
- Added `Random.NextUnitVector2()`.
- Added `Random.NextUnitVector3()`.
- Added `Random.NextRotation()`.
- Added `Rune.Repeat(int)`.
- Added `byte.IsEven()`.
- Added `byte.IsOdd()`.
- Added `byte.IsPrime()`.
- Added `byte.UnpackBits()`.
- Added `byte.RangeTo(byte)`, `byte.RangeTo(short)`, `byte.RangeTo(int)`, and `byte.RangeTo(long)`.
- Added `int.Mod(int)`.
- Added `int.RangeTo(int)`, and `int.RangeTo(long)`.
- Added `int.UnpackBits()`.
- Added `long.Mod(long)`.
- Added `long.RangeTo(long)`.
- Added `long.UnpackBits()`.
- Added `sbyte.IsEven()`.
- Added `sbyte.IsOdd()`.
- Added `sbyte.IsPrime()`.
- Added `sbyte.Mod(sbyte)`.
- Added `short.IsEven()`.
- Added `short.IsOdd()`.
- Added `short.Mod(short)`.
- Added `short.RangeTo(short)`, `short.RangeTo(int)`, and `short.RangeTo(long)`.
- Added `short.UnpackBits()`.
- Added `string.IsPalindrome()`.
- Added `Stream.GetHash<T>()`.
- Added `Stream.TryWriteHash<T>(Span<byte>, out int)`.
- Added `Stream.ReadInt16([Endian])`.
- Added `Stream.ReadInt32([Endian])`.
- Added `Stream.ReadInt64([Endian])`.
- Added `Stream.ReadUInt16([Endian])`.
- Added `Stream.ReadUInt32([Endian])`.
- Added `Stream.ReadUInt64([Endian])`.
- Added `Stream.Write(short, [Endian])`.
- Added `Stream.Write(int, [Endian])`.
- Added `Stream.Write(long, [Endian])`.
- Added `Stream.Write(ushort, [Endian])`.
- Added `Stream.Write(uint, [Endian])`.
- Added `Stream.Write(ulong, [Endian])`.
- Added `TimeSpan.Ago()`.
- Added `TimeSpan.FromNow()`.
- Added `TimeSpanParser.TryParse` which supersedes `TimeSpanParser.Parse`.
- Added `Sqrt()` and `ComplexSqrt()` for all built-in decimal types.
- Added `All()` and `Any()` for `Span<T>` and `ReadOnlySpan<T>`, mimicking the corresponding methods in `System.Linq`.
- Added `Sign()` for built-in numeric types. For unsigned types, this never returns -1.
- Added `Type.Implements<T>()` and `Type.Implements(Type)`. (#25)
- Added `Type.Inherits<T>()` and `Type.Inherits(Type)`. (#25)
- Added `DigitalRoot` function for built-in integer types.
- Added `Factorial` function for built-in integer types.
- Added `HostToNetworkOrder` and `NetworkToHostOrder` for `short`, `int`, and `long`.
- Added `IsLeapYear` function for `DateTime` and `DateTimeOffset`, as well as built-in numeric types.
- Added `MultiplicativePersistence` function for built-in integer types.
- Added `RotateLeft` and `RotateRight` for built-in integer types.
- Added trigonometric functions for built-in numeric types,
 including `Acos()`, `Asin()`, `Atan()`, `Atan2()`, `Cos()`, `Sin()`, `Tan()` (#49)
- Added time-related extension methods for built-in numeric types,
 including `Milliseconds()`, `Seconds()`, `Minutes()`, `Hours()`, `Days()`, and `Weeks()`. `Ticks()` is also available, but only
 for integers; not floating point.
- Added `StringBuilderReader` (inheriting `TextReader`) which allows reading from a `StringBuilder` without consuming the
 underlying string.
- Added extension methods for `System.Decimal`.

### Changed

- Updated to .NET 6. (#45)
- Methods defined to accept `byte[]` have been changed accept `IReadOnlyList<byte>`.
- Extension methods are now defined in appropriate child namespaces to reduce the risk of name collisions. (#7)
- `char[].Random(int)`, `char[].Random(int, int)`, `IEnumerable<char>.Random(int)`, and `IEnumerable<char>.Random(int, int)` have
 been redefined as `Random.NextString(IReadOnlyList<char>, int)`.
- `IComparable<T>.Between(T, T)` has been redefined as `IComparable<T1>.Between(T2, T3, [InclusiveOptions])` to allow comparison
 of disparate yet comparable types, and also offers inclusivity options.
- `DateTime` extensions now wrap `DateTimeOffset` extensions.
- `DateTime.ToUnixTimestamp([bool])` has been redefined as `DateTime.ToUnixTimeMilliseconds()` and `DateTime.ToUnixTimeSeconds()`.
- `Dictionary<T1, T2>.ToGetParameters()`, `IDictionary<T1, T2>.ToGetParameters()`,
 and `IReadOnlyDictionary<T1, T2>.ToGetParameters()`, has been redefined as `IEnumerable<KeyValuePair<T1, T2>>.ToGetParameters()`.
- `Dictionary<T1, T2>.ToConnectionString()`, `IDictionary<T1, T2>.ToConnectionString()`,
 and `IReadOnlyDictionary<T1, T2>.ToConnectionString()`, has been redefined
 as `IEnumerable<KeyValuePair<T1, T2>>.ToConnectionString()`.
- `IList<T>.OneOf([Random])` and `IEnumerable<T>.OneOf([Random])` have been redefined as `Random.NextFrom<T>(IEnumerable<T>)` to
 fall in line with the naming convention of `System.Random`. (#21)
- `IList<T>.Shuffle([Random])` now uses a Fisher-Yates shuffle implementation.
- `IList<T>.Shuffle([Random])` has been repurposed to shuffle the list in place, rather than returning a new enumerable.
   - `IEnumerable<T>.Shuffle([Random])` has been renamed to `IEnumerable<T>.Shuffled([Random])` to avoid confusion
     with `IList<T>.Shuffle([Random])`.
- `Random.CoinToss()` has been redefined as `Random.NextBoolean()` to fall in line with the naming convention of `System.Random`.
- `Random.OneOf<T>(T[])` and `Random.OneOf<T>(IList<T>)` have been redefined as `Random.NextFrom<T>(IEnumerable<T>)` to fall in
 line with the naming convention of `System.Random`.
- `Enum.Next([bool])` and `Enum.Previous([bool])` have been redefined.
 as `Enum.Next()`, `Enum.Previous()`, `Enum.NextUnchecked()`, `Enum.PreviousUnchecked()`. The `Unchecked` variants of these
 methods do not perform index validation, and will throw `IndexOutOfRangeException` when attempting to access an invalid index.
 The checked variants will perform a modulo to wrap the index.
- Seperated `string.WithAlternative(string, [bool])` to `string.WithEmptyAlternative(string)`
 and `string.WithWhiteSpaceAlternative(string)`.
- `string.AsNullIfEmpty()` and `string.AsNullIfWhiteSpace()` now accept a nullable `string`.
- `IEnumerable<byte>.GetString([Encoding])` has been renamed to `IReadOnlyList<byte>.ToString` and its `Encoding` parameter has
 been made non-optional.
- Fixed a bug where `IEnumerable<KeyValuePair<K,V>>.ToConnectionString()` would not sanitize types with custom `ToString()`
 implementation. (#20)
 Renamed `string.Random(int[, Random])` to `string.Randomize(int[, Random])`.
- Redefined `char[].Random(int)`, `char[].Random(int, Random)`, `IEnumerable<char>.Random(int)`,
 and `IEnumerable<char>.Random(int, Random)`, as `Random.NextString(IReadOnlyList<char>, int)`.
- Improved performance for:
   - `string.IsLower()`
   - `string.IsUpper()`
   - `string.Reverse()`
   - `TimeSpanParser`

### Removed

- Indefinitely suspended Unity support, until such a time that Unity can be updated to a newer version of .NET.
 See: https://forum.unity.com/threads/unity-future-net-development-status.1092205/
- Removed `bool.And(bool)`.
- Removed `bool.NAnd(bool)`.
- Removed `bool.NOr(bool)`.
- Removed `bool.Not(bool)`.
- Removed `bool.Or(bool)`.
- Removed `bool.ToByte()`.
- Removed `bool.ToInt16()`.
- Removed `bool.ToInt64()`.
- Removed `bool.XNOr()`.
- Removed `bool.XOr()`.
- Removed `IConvertible.To<T>([IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrDefault<T>([IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrDefault<T>(out T, [IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrNull<T>([IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrNull<T>(out T, [IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrOther<T>(T, [IFormatProvider])`. (#13)
- Removed `IConvertible.ToOrOther<T>(out T, T, [IFormatProvider])`. (#13)
- Removed `IEnumerable<T>.Split(int)` - this functionality is now provided by .NET in the form of the `Chunk` method.
 See: https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.chunk?view=net-6.0.
- Removed `MemberInfo.GetDefaultValue()` (use `SelectFromCustomAttribute()` instead).
- Removed `MemberInfo.GetDescription()` (use `SelectFromCustomAttribute()` instead).
- Removed `int.ToBoolean()`.
- Removed `long.ToBoolean()`.
- Removed `short.ToBoolean()`.
- Removed `uint.ToBoolean()`.
- Removed `ushort.ToBoolean()`.
- Removed `ulong.ToBoolean()`.
- Removed `WaitHandle.WaitOneAsync()`. For suspensions of execution during asynchronous operations, favour `TaskCompletionSource`
 or `TaskCompletionSource<T>`.
 See: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.taskcompletionsource?view=net-6.0
 and https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.taskcompletionsource-1?view=net-6.0

## [2.6.0] - 2020-10-20

### Added

- Add `string.AsNullIfEmpty()`.
   - Returns the current string, or `null` if the current string is null or empty.
- Add `string.AsNullIfWhiteSpace()`.
   - Returns the current string, or `null` if the current string is null, empty, or consists of only whitespace.
- Add `string.Reverse()`.
   - Reverses the current string.
- Add `string.WithAlternative()`.
   - Returns the current string, or an alternative value if the current string is null or empty, or optionally if the current
     string consists of only whitespace.

### Changed

- n/a

### Removed

- n/a

## [2.5.0] - 2020-07-15

### Added

- `WaitHandle.WaitOneAsync()`.
   - Wraps `WaitHandle.WaitOne` as a `Task`.
- Add support for Unity 2019.4.3f1.
   - Add `GameObject.LookAt(GameObject)`.
       - Rotates the Transform on the current GameObject so that it faces the Transform on another GameObject.
   - Add `GameObject.LookAt(Transform)`.
       - Rotates the Transform on the current GameObject so that it faces another transform.
   - Add `Transform.LookAt(GameObject)`
       - Rotates the current Transform so that it faces the Transform on another GameObject.
   - Add `Vector3.Round([float])`.
       - Returns a rounded Vector3 by calling `float.Round()` on each component.
   - Add `Vector3.WithX(float)`.
       - Returns a Vector3 with a new X component value.
   - Add `Vector3.WithY(float)`.
       - Returns a Vector3 with a new Y component value.
   - Add `Vector3.WithZ(float)`.
       - Returns a Vector3 with a new Z component value.
   - Add `Vector3.WithXY(float, float)`.
       - Returns a Vector3 with new X and Y component values.
   - Add `Vector3.WithXZ(float, float)`.
       - Returns a Vector3 with new X and Z component values.
   - Add `Vector3.WithYZ(float, float)`.
       - Returns a Vector3 with new Y and Z component values.
   - Add `BetterBehavior` (experimental wrapper over `MonoBehaviour`).

### Changed

- n/a

### Removed

- n/a

## [2.2.0] - 2020-04-21

### Added

- Add `string.ChangeEncoding(Encoding, Encoding)`.
   - Converts this string from one encoding to another.
- Add `string.IsLower()`.
   - Determines if all alpha characters in this string are considered lowercase.
- Add `string.IsUpper()`.
   - Determines if all alpha characters in this string are considered uppercase.

- Various extension methods with regards to reflection:
   - `GetDefaultValue` and `GetDefaultValue<T>` - gets the value stored in the member's `DefaultValue` attribute.
   - `GetDescription`- gets the value stored in the member's `Description` attribute.
   - `SelectFromCustomAttribute<T1, T2>` - Internally calls `GetCustomAttribute<T1>` and passes it to a `Func<T1, T2>` so that
     specific members may be selected.

### Changed

- n/a

### Removed

- n/a

## [2.1.0] - 2020-04-18

### Added

- Add `bool bool.And(bool)`.
   - Performs logical AND.
- Add `bool bool.Or(bool)`.
   - Performs logical OR.
- Add `bool bool.Not(bool)`.
   - Performs logical NOT.
- Add `bool bool.XOr(bool)`.
   - Performs Logical XOR.
- Add `bool bool.NAnd(bool)`.
   - Performs logical NAND.
- Add `bool bool.NOr(bool)`.
   - Performs logical NOR.
- Add `bool bool.XNOr(bool)`.
   - Performs logical XNOR.
- Add `byte bool.ToByte()`.
   - 1 if `true`, 0 otherwise.
- Add `short bool.ToInt16()`.
   - 1 if `true`, 0 otherwise.
- Add `long bool.ToInt64()`.
   - 1 if `true`, 0 otherwise.

### Changed

- n/a

### Removed

- n/a

## [2.0.0] - 2020-04-18

### Added

- Add `IEnumerable<T>.Split(int)`.
   - Performs the same operation as the previously defined `IEnumerable<byte>.Chunkify(int)`, except now accepts any type `T`.

### Changed

- Fix `DateTime.Last(DayOfWeek)` implementation.
   - Now returns the correct date/time for a given day of the week.

### Removed

- Remove `IEnumerable<byte>.Chunkify(int)`.
   - Replaced by a method of the same behaviour `IEnumerable<T>.Split(int)`.

## Earlier versions

Earlier versions of this package are undocumented and unlisted from package results.

[unreleased]: https://github.com/oliverbooth/X10D/compare/v3.2.0...main
[3.2.0]: https://github.com/oliverbooth/X10D/releases/tag/v3.2.0
[3.1.0]: https://github.com/oliverbooth/X10D/releases/tag/v3.1.0
[3.0.0]: https://github.com/oliverbooth/X10D/releases/tag/v3.0.0
[2.6.0]: https://github.com/oliverbooth/X10D/releases/tag/2.6.0
[2.5.0]: https://github.com/oliverbooth/X10D/releases/tag/2.5.0
[2.2.0]: https://github.com/oliverbooth/X10D/releases/tag/2.2.0
[2.1.0]: https://github.com/oliverbooth/X10D/releases/tag/2.1.0
[2.0.0]: https://github.com/oliverbooth/X10D/releases/tag/2.0.0