Ubiquity.NET.Extensions
20.1.8
Requires NuGet 4.9.0 or higher.
dotnet add package Ubiquity.NET.Extensions --version 20.1.8
NuGet\Install-Package Ubiquity.NET.Extensions -Version 20.1.8
<PackageReference Include="Ubiquity.NET.Extensions" Version="20.1.8" />
<PackageVersion Include="Ubiquity.NET.Extensions" Version="20.1.8" />
<PackageReference Include="Ubiquity.NET.Extensions" />
paket add Ubiquity.NET.Extensions --version 20.1.8
#r "nuget: Ubiquity.NET.Extensions, 20.1.8"
#:package Ubiquity.NET.Extensions@20.1.8
#addin nuget:?package=Ubiquity.NET.Extensions&version=20.1.8
#tool nuget:?package=Ubiquity.NET.Extensions&version=20.1.8
About
Ubiquity.NET.Extensions contains general extensions for .NET. This is a bit of a "grab bag" of functionality used by but not actually part of multiple other Ubiquity.NET projects. A core principal is that this library has NO dependencies beyond the runtime itself. That is, this library should remain at the bottom of any dependency chain.
Key support
- Computing a hash code for a ReadOnlySpan of bytes using System.IO.System.IO.Hashing.XxHash3
- DisposableAction for building actions that must occur on Dispose
- This is useful for implementing the RAII pattern in .NET.
- MustUseReturnValueAttribute that is compatible with the MustUseRetVal package.
- StringNormalizer extensions to support converting line endings of strings for interoperability across OS platforms and compatibility with "on disk" representations.
- A custom ValidatedNotNullAttribute to allow compiler to assume a parameter value is validated as not null.
- DictionaryBuilder to enable dictionary initializer style initialization of
ImmutableDictionary<TKey, TValue>with significantly reduced overhead.- This leverages an
ImmutableDictionary<TKey, TValue>.Builderunder the hood to build the dictionary. When theToImmutable()method is called the builder is converted to the immutable state without any overhead of a copy or re-construction of hash tables etc...
- This leverages an
- KvpArrayBuilder to enable initializer style initialization of
ImmutableArray<KeyValuePair<TKey, TValue>>with significantly reduced overhead.- This leverages an
ImmutableArray<T>.Builderunder the hood to build the array directly. When theToImmutable()method is called the builder is converted to the immutable state without any overhead of a copy. - Since this is an array and not a dictionary there is no overhead for allocating, initializing or copying any hash mapping for the keys.
- This leverages an
Fluent Validation
The library includes extensions that support fluent validation to allow use in property accessors and constructors that forward values to a base or another constructor. This is normally used when the value itself isn't passed on but some transformed value is.
| Method | Description |
|---|---|
ThrowIfNull() |
Throws an exception if the argument is null or returns it as-is |
ThrowIfOutOfRange() |
Throws an exception if a value is out of the specified range |
ThrowIfNotDefined() |
Throws an exception if an enum value is undefined |
Runtime Dependencies
None
There are dependencies on various compile time analyzers but no runtime dependencies are allowed.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 was computed. 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 was computed. 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 was computed. 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 was computed. |
| .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
- System.Collections.Immutable (>= 10.0.0)
-
net8.0
- No dependencies.
NuGet packages (6)
Showing the top 5 NuGet packages that depend on Ubiquity.NET.Extensions:
| Package | Downloads |
|---|---|
|
Ubiquity.NET.Llvm.Interop
.NET Low Level Interop Bindings for Ubiquity.LibLLVM []. Direct use of this low level API is **STRONGLY** discouraged, instead you should use the Ubiquity.NET.Llvm package, which provides a full C# object model projection of the LLVM APIs on top of this library. |
|
|
Ubiquity.NET.InteropHelpers
.NET Low Level Interop support library to aid in native code interop scenarios |
|
|
Ubiquity.NET.Runtime.Utils
General use Support for interpreters/runtimes |
|
|
Ubiquity.NET.CommandLine
General use Support for Command line parsing based on System.CommandLine |
|
|
Ubiquity.NET.SrcGeneration
General use Support for Source Generators |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 20.1.8 | 548 | 11/17/2025 |
| 20.1.8-rc.3 | 228 | 11/16/2025 |
| 20.1.8-rc.2 | 166 | 11/14/2025 |
| 20.1.8-rc.1 | 215 | 11/13/2025 |
| 20.1.8-rc | 271 | 11/2/2025 |
| 20.1.8-epsilon | 183 | 10/11/2025 |
| 20.1.8-delta | 257 | 9/7/2025 |
| 20.1.8-beta | 258 | 9/4/2025 |
| 20.1.8-alpha.0.2 | 536 | 7/22/2025 |
| 20.1.8-alpha.0.1 | 54 | 7/18/2025 |
| 20.1.8-alpha | 165 | 7/16/2025 |