SimpleHasher 1.6.0
dotnet add package SimpleHasher --version 1.6.0
NuGet\Install-Package SimpleHasher -Version 1.6.0
<PackageReference Include="SimpleHasher" Version="1.6.0" />
paket add SimpleHasher --version 1.6.0
#r "nuget: SimpleHasher, 1.6.0"
// Install SimpleHasher as a Cake Addin #addin nuget:?package=SimpleHasher&version=1.6.0 // Install SimpleHasher as a Cake Tool #tool nuget:?package=SimpleHasher&version=1.6.0
Hasher
Simple Hashing helper for entities. Default behaviour calculates the HashCode
for all public properties.
HasherIncludeAttribute
can be used to include non-public ones.
HasherExcludeAttribute
can be used to exclude public ones.
Usage
Normal
using Hasher;
public class Entity
{
public int Property1 { get; set; }
public int Property2 { set => Console.Write(value); } // Skipped
private int Property3 { get; set; } // Skipped
[HasherInclude] private int Property4 { get; set; }
[HasherExclude] public int Property5 { get; set; } // Skipped
}
var entity = new Entity();
var hashCode = entity.ResolveHash();
Async
using Hasher;
public class EntityWithTasks
{
public Task<int> Property1 { get; set; } // Will await this value
public int Property2 { set => Console.Write(value); } // Skipped
private int Property3 { get; set; } // Skipped
[HasherInclude] private int Property4 { get; set; }
[HasherExclude] public int Property5 { get; set; } // Skipped
}
var entity = new EntityWithTasks();
var hashCode = await entity.ResolveHashAsync();
By using ResolveHashAsync
we will get the HashCode
of the actual Task
value, if any, instead of the Task
's HashCode
.
As a service
serviceCollection.AddHasher();
...
public class MyService
{
private readonly IHasher _hasher;
public MyService(IHasher hasher)
{
_hasher = hasher;
}
public void DoWork<T>(T value)
{
var hash = _hasher.ResolveHash(value);
}
}
Null
Returns 0
for null values.
using Hasher;
string nullString = null;
var hashCode = nullString.ResolveHash(); // == 0
Nested vs Top Level Only
You can enable nested calculations during registration using:
serviceCollection.AddHasher(o => o.EnableNestedHashes());
Custom Mappings
Custom mappings are allowed for certain types. You can configure your mappings using:
serviceCollection.AddHasher(o => o.Register<string>(x => x.Length, x => x.Count(s => s == 's'), x => x.Count(s => s == 'd'))
.Register<Entity>(x => x.Property1, x => x.Property2));
This, obviously, only works when using the injected service (IHashService
). Simpler mapping has been supplied for the extension methods by using the HasherConfiguration
attribute which offers support for top level property names:
[HasherConfiguration(nameof(MyProperty1), nameof(MyProperty3))]
public class MyClass3
{
public int MyProperty1 { get; set; }
public int MyProperty2 { get; set; } // Skipped
public int MyProperty3 { get; set; }
}
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 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 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. |
-
.NETStandard 2.1
-
net5.0
-
net6.0
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.