C# allows you to write generic code with a few constraints that can’t be expressed through the type hierarchy alone. For example, you can require that a generic type parameter only accepts types that are structs, or reference types, or non-abstract types that have a public default constructor: 1 2 3 4 5 6 7 public void M() where T1 : struct where T2 : class where T3 : new() { /* code */ } That last case is what we’re interested in for this post.