deniszykov.TypeConversion
3.0.0
See the version list below for details.
dotnet add package deniszykov.TypeConversion --version 3.0.0
NuGet\Install-Package deniszykov.TypeConversion -Version 3.0.0
<PackageReference Include="deniszykov.TypeConversion" Version="3.0.0" />
paket add deniszykov.TypeConversion --version 3.0.0
#r "nuget: deniszykov.TypeConversion, 3.0.0"
// Install deniszykov.TypeConversion as a Cake Addin
#addin nuget:?package=deniszykov.TypeConversion&version=3.0.0
// Install deniszykov.TypeConversion as a Cake Tool
#tool nuget:?package=deniszykov.TypeConversion&version=3.0.0
Introduction
For historical reasons, .NET has several approaches to value conversion:
- Explicit/Implicit operators
- System.Convert class
- IConvertible interface
- System.ComponentModel.TypeConverter
- To, From, Parse, Create methods
- Constructors (Uri, Guid)
- Meta types (Enums, Nullable Types).
This package combines all these approaches under one API.
Installation
Install-Package deniszykov.TypeConversion
Usage
TypeConversionProvider methods
// generic
ToType Convert<FromType, ToType>(fromValue, [format], [formatProvider]);
bool TryConvert<FromType, ToType>(fromValue, out result, [format], [formatProvider]);
string ConvertToString<FromType>(fromValue, [format], [formatProvider]);
// non-generic
object Convert(fromValue, toType, fromValue, [format], [formatProvider]);
bool TryConvert(fromValue, toType, fromValue, out result, [format], [formatProvider]);
Example
using deniszykov.TypeConversion;
var conversionProvider = new TypeConversionProvider();
var timeSpanString = "00:00:01";
var timeSpan = conversionProvider.Convert<string, TimeSpan>(timeSpanString);
// with default settings TimeSpan.Parse(value, format, formatProvider)
// is used for conversion inside Convert<string, TimeSpan>()
Configuration
using deniszykov.TypeConversion;
var configuration = new TypeConversionProviderConfiguration
{
Options = ConversionOptions.UseDefaultFormatIfNotSpecified
};
#if NET45
var typeConversionProvider = new TypeConversionProvider(configuration);
#else
var typeConversionProvider = new TypeConversionProvider(Options.Create(configuration));
#endif
Or configure via DI
using deniszykov.TypeConversion;
using Microsoft.Extensions.DependencyInjection;
Host.CreateDefaultBuilder().ConfigureServices(IServiceCollection services) => {
// add configuration
services.Configure<TypeConversionProviderConfiguration>(options =>
{
options.DefaultFormatProvider = CultureInfo.CurrentUICulture;
});
// register service
services.AddSingleton<ITypeConversionProvider, TypeConversionProvider>();
}
Providing custom conversion between types
using deniszykov.TypeConversion;
using Microsoft.Extensions.DependencyInjection;
Host.CreateDefaultBuilder().ConfigureServices(IServiceCollection services) => {
services.Configure<TypeConversionProviderConfiguration>(options =>
{
// register custom conversion from Uri to string
options.RegisterConversion<Uri, string>((uri, format, formatProvider) => uri.OriginalString);
});
}
Preparing for AOT runtime
using deniszykov.TypeConversion;
using Microsoft.Extensions.DependencyInjection;
Host.CreateDefaultBuilder().ConfigureServices(IServiceCollection services) => {
services.Configure<TypeConversionProviderConfiguration>(options =>
{
// disable optimizations which use dynamic code generation
options.Options &= ~(ConversionOptions.OptimizeWithExpressions | ConversionOptions.OptimizeWithGenerics);
});
}
Key Abstractions
interface ITypeConversionProvider; // provides methods to get IConverter
interface IConverter<FromType, ToType>; // converts values
interface IConversionMetadataProvider; // provides metadata for ITypeConversionProvider
Product | Versions |
---|---|
.NET | net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows net7.0 net7.0-android net7.0-ios net7.0-maccatalyst net7.0-macos net7.0-tvos net7.0-windows |
.NET Core | netcoreapp1.0 netcoreapp1.1 netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 |
.NET Standard | netstandard1.6 netstandard2.0 netstandard2.1 |
.NET Framework | net45 net451 net452 net46 net461 net462 net463 net47 net471 net472 net48 net481 |
MonoAndroid | monoandroid |
MonoMac | monomac |
MonoTouch | monotouch |
Tizen | tizen30 tizen40 tizen60 |
Xamarin.iOS | xamarinios |
Xamarin.Mac | xamarinmac |
Xamarin.TVOS | xamarintvos |
Xamarin.WatchOS | xamarinwatchos |
-
.NETCoreApp 2.1
- Microsoft.Extensions.Options (>= 3.1.10)
-
.NETFramework 4.5
- No dependencies.
-
.NETFramework 4.6.1
- Microsoft.Extensions.Options (>= 5.0.0)
-
.NETStandard 1.6
- Microsoft.Extensions.Options (>= 1.1.2)
- NETStandard.Library (>= 1.6.1)
- System.Runtime.Serialization.Primitives (>= 4.3.0)
-
.NETStandard 2.0
- Microsoft.Extensions.Options (>= 3.1.10)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on deniszykov.TypeConversion:
Package | Downloads |
---|---|
Pluto
Pluto is an application server |
|
RoguelikeToolkit.Entities
Package Description |
|
WebView2.DOM
C# DOM bindings to be used with WebView2 |
|
deniszykov.CommandLine
Command line parser and binder. Provides API for parsing and binding command line arguments to .NET methods. |
|
SliccDB
A simple, one file graph database! |
GitHub repositories
This package is not used by any popular GitHub repositories.
# 3.0.0
- renamed project to `deniszykov.TypeConversion`
- removed HexConvert, Base64Convert, TypeActivator
- refactored TypeConvert to `ITypeConversionProvider` abstraction and `TypeConversionProvider` implementation
- added configurable behaviour via `TypeConversionProviderConfiguration` and `IConversionMetadataProvider`
- renamed `EnumHelper` to EnumConversionInfo and made it instantiable class instead of static class.