Ubiquity.NET.Extensions
20.1.8-delta
Requires NuGet 4.9.0 or higher.
dotnet add package Ubiquity.NET.Extensions --version 20.1.8-delta
NuGet\Install-Package Ubiquity.NET.Extensions -Version 20.1.8-delta
<PackageReference Include="Ubiquity.NET.Extensions" Version="20.1.8-delta" />
<PackageVersion Include="Ubiquity.NET.Extensions" Version="20.1.8-delta" />
<PackageReference Include="Ubiquity.NET.Extensions" />
paket add Ubiquity.NET.Extensions --version 20.1.8-delta
#r "nuget: Ubiquity.NET.Extensions, 20.1.8-delta"
#:package Ubiquity.NET.Extensions@20.1.8-delta
#addin nuget:?package=Ubiquity.NET.Extensions&version=20.1.8-delta&prerelease
#tool nuget:?package=Ubiquity.NET.Extensions&version=20.1.8-delta&prerelease
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.
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.
- Fluent style parameter value validation extensions.
- These are useful when passing parameters to a function that produces a result that is fed to the base constructor. These are also useful in body expressions to validate input parameters.
- DictionaryBuilder to enable dictionary initializer style initialization of
ImmutableDictionary<TKey, TValue>
with significantly reduced overhead.- This leverages an
ImmutableDictionary<TKey, TValue>.Builder
under 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 array initializer style initialization of
ImmutableArray<KeyValuePair<TKey, TValue>>
with significantly reduced overhead.- This leverages an
ImmutableArray<T>.Builder
under 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.
ThrowIfNull()
ThrowIfOutOfRange()
ThrowIfNotDefined()
PolyFill
While it isn't impossible
to make polyfill this to work on .NET standard 2.0 it is a HUGE
amount of effort to do so and there's no compelling reason to do so. Roslyn extensions/VSIX
extensions are the most likely candidates left. VS extensions are shifting to external
processes for extensions for this reason, leaving Roslyn generators. The bottom line is
that too much of MODERN .NET and C# is incompatible with .NET Standard 2.0 that a distinct
PolyFill library can only cover some of it. (Even the PolySharp generator covers only
some of the missing functionality)
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | 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. |
-
net8.0
- No dependencies.
NuGet packages (5)
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.TextUX
General use Support for Text based UX (Console applications) |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
20.1.8-delta | 41 | 9/7/2025 |
20.1.8-beta | 132 | 9/4/2025 |
20.1.8-alpha.0.2 | 500 | 7/22/2025 |
20.1.8-alpha.0.1 | 42 | 7/18/2025 |
20.1.8-alpha | 115 | 7/16/2025 |