Configurable Source Generator Minimum requirement: .NET Standard 2.0 & C# 8.0 The ultimate fast alternative to Activator.CreateInstance<T> Up to 50x faster than Activator.CreateInstance<T> Generic Parameters Support Non-Public Constructor Support No Generic Constraints TryGetValue-like TryFastNew API Link Mode PublishTrimmed Support C# 8 Nullable Support C# 10 Parameterless struct constructors Support (Both invokes or not)
$ dotnet add package FastGenericNew.SourceGeneratorThe ultimate fast and powerful alternative to Activator.CreateInstance<T> / new T()
✔️ The best CreateInstance ever
Activator.CreateInstance<T>PublishTrimmed Support🪛 Modern Compiler Integration
🔥 Latest C#/.NET Features Support
You should only use one of them
dotnet add package FastGenericNew --version 3.3.0
<ItemGroup>
<PackageReference Include="FastGenericNew" Version="3.3.0" />
</ItemGroup>
dotnet add package FastGenericNew.SourceGenerator --version 3.3.0
<ItemGroup>
<PackageReference Include="FastGenericNew.SourceGenerator" Version="3.3.0" />
</ItemGroup>
.NET Standard 2.0 or above
C# 8.0 or above
Roslyn 4.0.1 or above
Modern IDE (Optional) [VS2022, Rider, VSCode]
using FastGenericNew;
// Simply replace 'Activator' to 'FastNew'
var obj = FastNew.CreateInstance<T>();
// With parameter(s)
var obj2 = FastNew.CreateInstance<T, string>("text");
var obj3 = FastNew.CreateInstance<T, string, int>("text", 0);
// Try pattern
// NOTE: The try pattern will only check if the constructor can be called.
// It will not catch or handle any exceptions thrown in the constructor.
if (FastNew.TryCreateInstance<T, string>("arg0", out T result));
{
// ...
}
With .NET Framework,
Activator.CreateInstance<T>()invokes the parameterless constructor of ValueType if
the constraint iswhere T : new()but appears to ignore the parameterless constructor if the constraint iswhere T : struct.
ButFastNew.CreateInstance<T>()will always invoke the parameterless constructor if it's available.If you don't want to invoke the parameterless constructor of ValueType, consider using
FastNew.NewOrDefault<T>()which will never invoke the parameterless constructor ofValueType
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.22000
AMD Ryzen 9 3900X, 1 CPU, 24 logical and 12 physical cores
.NET SDK=6.0.200-preview.22055.15
[Host] : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT
.NET 5.0 : .NET 5.0.14 (5.0.1422.5710), X64 RyuJIT
.NET 6.0 : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT
.NET Framework 4.8 : .NET Framework 4.8 (4.8.4470.0), X64 RyuJIT
FastGenericNew is licensed under the MIT license.