DEV Community


C# Create new T()

rickystam profile image Ricky Stam Updated on ・1 min read

For a long time now whenever i had to create a new instance of a generic type parameter i was using Activator.CreateInstace(Type) method


public class Dog : ISound
    public string Sound { get; set; } = "woof woof";

public class Animal<T> where T : ISound
    public ISound GetInstance()
        return (ISound)Activator.CreateInstance(typeof(T));

Recently i stumbled upon the new constraint keyword from the MS docs (somehow i missed that 😞)
and the Generic class of Animal above can be rewritten as following:

public class Animal<T> where T : ISound, new()
    public T GetInstance()
        return new T();

and can be used:

var animal = new Animal<Dog>();
var dog = animal.GetInstance();
var sound = dog.Sound; //woof woof

Important: When you use the new() constraint with other constraints, it must be specified last.

This post was written with love ❤️

Discussion (1)

Editor guide
ahedreville profile image
Alexandre Hedreville • Edited

the drawback for this is that you need to have no constructors or a public parameter less constructor