Gapotchenko.FX.Tuples
2024.2.5
Prefix Reserved
dotnet add package Gapotchenko.FX.Tuples --version 2024.2.5
NuGet\Install-Package Gapotchenko.FX.Tuples -Version 2024.2.5
<PackageReference Include="Gapotchenko.FX.Tuples" Version="2024.2.5" />
paket add Gapotchenko.FX.Tuples --version 2024.2.5
#r "nuget: Gapotchenko.FX.Tuples, 2024.2.5"
// Install Gapotchenko.FX.Tuples as a Cake Addin #addin nuget:?package=Gapotchenko.FX.Tuples&version=2024.2.5 // Install Gapotchenko.FX.Tuples as a Cake Tool #tool nuget:?package=Gapotchenko.FX.Tuples&version=2024.2.5
Overview
The module provides extended functionality for .NET tuples represented by System.Tuple
and System.ValueTuple
types.
Equality Comparer for Value Tuples
In .NET, value tuples are represented by System.ValueTuple
type.
They allow to quickly pack several values together without creating dedicated types for that.
Value tuples come with sane defaults, but sometimes you may need custom equality comparers for them. Let's take a look at example:
HashSet<(string, int)> database =
new()
{
// name, age
("Alice", 32),
("Bob", 40),
("John", 14)
};
Let's suppose that we need to search for records in that database by name and age but ignoring the case of letters in the name. The default value tuple equality comparer is case-sensitive for strings, so the following database query will be unsuccessful:
Console.WriteLine("The query result: {0}.", database.Contains(("john", 14)));
// The query result: False.
One way to fix that is to manually create a custom IEqualityComparer<(T1, T2)>
implementation and pass it to the constructor of the HashSet
class.
Another more simple way to solve the problem is to use Gapotchenko.FX.Tuples.ValueTupleEqualityComparer
class to quickly create a specialized equality comparer that fits our needs:
// Create a custom equality comparer for (string, int) value tuple.
var comparer = ValueTupleEqualityComparer.Create<string, int>(
StringComparer.CurrentCultureIgnoreCase, // ignore case for strings
null); // use a default comparer for integers
HashSet<(string, int)> database =
new(comparer)
{
("Alice", 32),
("Bob", 40),
("John", 14)
};
Console.WriteLine("The query result: {0}.", database.Contains(("john", 14)));
Now the code works as expected:
The query result: True.
Equality Comparer for Tuples
Tuples are represented by System.Tuple
types.
The main difference of tuples from value tuples is that System.Tuple
types are classes while System.ValueTuple
types are structures.
The remaining part of the concept is almost the same.
Gapotchenko.FX.Tuples
module allows you to create custom equality comparers for tuples by using TupleEqualityComparer
class and its Create
methods.
Commonly Used Types
Gapotchenko.FX.Tuples.ValueTupleEqualityComparer
Gapotchenko.FX.Tuples.TupleEqualityComparer
Other Modules
Let's continue with a look at some other modules provided by Gapotchenko.FX:
- Gapotchenko.FX
- Gapotchenko.FX.AppModel.Information
- Gapotchenko.FX.Collections
- Gapotchenko.FX.Console
- Gapotchenko.FX.Data
- Gapotchenko.FX.Diagnostics
- Gapotchenko.FX.IO
- Gapotchenko.FX.Linq
- Gapotchenko.FX.Math
- Gapotchenko.FX.Memory
- Gapotchenko.FX.Security.Cryptography
- Gapotchenko.FX.Text
- Gapotchenko.FX.Threading
- ➴ Gapotchenko.FX.Tuples
Or look at the full list of modules.
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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 is compatible. netcoreapp2.2 was computed. netcoreapp3.0 is compatible. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 is compatible. net472 is compatible. 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. |
-
.NETCoreApp 2.1
- Gapotchenko.FX (>= 2024.2.5)
-
.NETCoreApp 3.0
- Gapotchenko.FX (>= 2024.2.5)
-
.NETFramework 4.6.1
- Gapotchenko.FX (>= 2024.2.5)
-
.NETFramework 4.7.1
- Gapotchenko.FX (>= 2024.2.5)
-
.NETFramework 4.7.2
- Gapotchenko.FX (>= 2024.2.5)
-
.NETStandard 2.0
- Gapotchenko.FX (>= 2024.2.5)
-
.NETStandard 2.1
- Gapotchenko.FX (>= 2024.2.5)
-
net5.0
- Gapotchenko.FX (>= 2024.2.5)
-
net6.0
- Gapotchenko.FX (>= 2024.2.5)
-
net7.0
- Gapotchenko.FX (>= 2024.2.5)
-
net8.0
- Gapotchenko.FX (>= 2024.2.5)
-
net9.0
- Gapotchenko.FX (>= 2024.2.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.