DevextremeToys 8.0.0
dotnet add package DevextremeToys --version 8.0.0
NuGet\Install-Package DevextremeToys -Version 8.0.0
<PackageReference Include="DevextremeToys" Version="8.0.0" />
paket add DevextremeToys --version 8.0.0
#r "nuget: DevextremeToys, 8.0.0"
// Install DevextremeToys as a Cake Addin #addin nuget:?package=DevextremeToys&version=8.0.0 // Install DevextremeToys as a Cake Tool #tool nuget:?package=DevextremeToys&version=8.0.0
DevextremeToys
Build Status
Build | Status | Current Version |
---|---|---|
CI | N/A | |
Packages | ||
Packages |
How to install
Follow instructions on Nuget.
About Extreme Developer's Toys
In dotnet framework there aren't some useful features. These features are essential and every time we start a new project we need them so we look for them or rewrite them. In this package there are some useful feature for every great developer.
- ConcurrentList
- like List<T> but thread safe.
- String Comparer Extensions
- With this extension you can use every string comparison but configured in the same way of your database.
- String Extensions
- It adds some feature like ReplaceFirst or ReplaceLast.
- URL base 64 encode & decode
- String extension to encode string to valid url encoded 64 and viceversa.
- Reflection Extensions
- It adds features to all object like SetPropertyValue and GetPropertyValue.
- Json Extensions
- It adds features to all objects like .ToJson() and .ToObject() for the string type.
- Compression Extension
- It adds features to all object to zip an instance of object.
- Serializer Extensions
- It adds features to all object to serialize them to and from byte[]
- Cryptography Extensions
- It adds feature to encrypt and decrypt strings
- List<> or IEnumerable<> Extensions
- It adds feature to List and IEnumerable such 'Split'
- Visitor Extensions
- It adds visitor (graph explorer\object tree explorer) to traverse object graph\aggregate
How to use
The first step is to install this package from Nuget.
Examples
Comcurrent List
Add this using
using DevExtremeToys.Concurrent;
Now you can use ConcurrentList in a multi threading environment
ConcurrentList<int> list = new ConcurrentList<int>();
list.Add(i);
ConcurrentList<MyClass> list = new ConcurrentList<MyClass>();
list.Add(new MyClass() { Name = "Test"});
String Comparer Extension
With this extension you can compare string with Case Sensitive and Accent Sensitive options.
Add this using
using DevExtremeToys.StringComparer;
Now you can compare strings with database rules
You can configure comparer rule once or use different configuration for every comparison.
In this example we use a global configuration
CompareSettings.Instance.GetSetting = () =>
{
return new Settings()
{
CaseOption = CaseOptions.Insensitive,
AccentOption = AccentOptions.Sensitive
};
};
string s1 = "à1abbbcccaaabbbccc";
string s2 = "à1ABBBCCCAAABBBCCC";
Assert.True(s1.CompareToDevEx(s1) == 0);
In this example we use a specific configuration
var localSettings = new Settings()
{
CaseOption = CaseOptions.Sensitive,
AccentOption = AccentOptions.Sensitive
};
Assert.False(s1.CompareToDevEx(s2, localSettings) == 0);
String Extensions
Add this using
using DevExtremeToys.Strings;
Now your strings have new features like ReplaceLast, ReplaceFirst
string s1 = "a1abbbcccaaabbbccc";
var r = s1.ReplaceLast("bbb", "ZZZ");
URL base 64 encode & decode
Add this using
using DevExtremeToys.Url;
Now your strings have EncodeURL64 and DecodeURL64 methods
string sourceString = "Dinanzi a me non fuor cose create \r\nse non etterne, e io etterno duro. \r\nLasciate ogne speranza, voi ch’intrate";
var encoded = sourceString.EncodeURL64();
var decoded = encoded.DecodeURL64();
Reflection Extensions
Add this using
using DevExtremeToys.Reflection;
Now all objects have new features like:
- GetPropertyValue
- SetPropertyValue
- GetFieldValue
- SetFieldValue
- GetPropertyAttribute
- GetFiledAttribute
MyClass myClass = new MyClas();
myClass.SetPropertyValue(nameof(MyClas.Name), "My Name");
Json Extensions
Add this using
using DevExtremeToys.JSon;
Now all objects have .ToJson() method and strings have .ToObject<>() method
TestClass myClass = new TestClass()
{
Name = "My Name",
Description = "My Description",
Id = 10
};
var json = myClass.ToJSon();
TestClass deserialized = json.ToObject<TestClass>();
Compression Extensions
Add this using
using DevExtremeToys.Compression;
Now all objects have .Zip() method and byte[] has .Unzip<>() method
MyClass myClass = new MyClass()
{
Name = "My Name",
Description = "My Description",
Id = 10
};
var zip = myClass.Zip();
MyClass unZipped = zip.Unzip<MyClass>();
Serializer Extensions
Add this using
using DevExtremeToys.Serialization;
Now all objects have .Zip() method and byte[] has .Unzip<>() method
MyClass myClass = new MyClass()
{
Name = "My Name",
Description = "My Description",
Id = 10
};
var tmp = myClass.ToUTF8ByteArray();
MyClass deserialized = tmp.FromUF8ByteArray<MyClass>();
Cryptography Extensions
Add this using
using DevExtremeToys.Strings;
Now all strings have .AesEncrypt method and .AesDecrypt methods
string key = "12345678901234567890123456789012";
string iv = "1234567890123456";
string plainText = "abcdefghijklmnopqrstuvwxyz1234567890";
string encrypted = plainText.AesEncrypt(key, iv);
string decrypted = encrypted.AesDecrypt(key, iv);
List<> or IEnumerable<> Extensions
Add this using
using DevExtremeToys.List;
Now all List<> or IEnumerable<> have .Split method
IEnumerable<int> list = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var subLists = list.Split(3);
List<int> list = new List<int>();
//...
var items = list.Split(3);
Visitor Extensions
Add this using
using DevExtremeToys.Visitors;
Now all objects .Visit method
MyClassA a = new MyClassA();
//...
//fill object properties (collection, objects, internals...)
//...
a.Visit((nodeInfo) =>
{
//nodeInfo.CurrentPath
//nodeInfo.CurrentPropertyInfo
//nodeInfo.CurrentInstance
//nodeInfo.ParentInstance
//nodeInfo.ParentNode
//nodeInfo.PropertyName
Debug.WriteLine(nodeInfo.CurrentPath);
});
... New features are coming soon ...
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. |
.NET Core | netcoreapp3.1 is compatible. |
-
.NETCoreApp 3.1
- Newtonsoft.Json (>= 13.0.3)
-
net5.0
- Newtonsoft.Json (>= 13.0.3)
-
net6.0
- Newtonsoft.Json (>= 13.0.3)
-
net7.0
- Newtonsoft.Json (>= 13.0.3)
-
net8.0
- Newtonsoft.Json (>= 13.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
8.0.0 | 525 | 12/9/2023 |
2.0.0 | 347 | 4/7/2023 |
1.4.0 | 518 | 7/21/2022 |
1.4.0-beta | 183 | 7/9/2022 |
1.3.0 | 455 | 7/9/2022 |
1.2.0 | 409 | 6/4/2022 |
1.1.0 | 428 | 5/28/2022 |
1.0.1 | 402 | 5/26/2022 |
1.0.0 | 402 | 5/22/2022 |
0.0.3-beta | 170 | 5/21/2022 |
0.0.3-alfa | 192 | 5/21/2022 |
- (new) .net 8 support
- (new) url friendly string base 64 encode and decode
- .net 7 support
- Added .Pad Extension to string type
- Fix AmbiguousMatchException in ReflectionExtensions
- Visitor Extension now has stop visiting feature
- added Async Visitor Extension
- Concurrent Generic List (thread safe)
- Object to JSon and viceversa
- Object to zip and viceversa
- String comparison with case sense like database
- Reflection utilities
- List utilities
- Cryptography utilities
- Visitor Extension
- And more...
- See documentation and examples at: https://github.com/AndreaPic/DevextremeToys