When you have code like the following:
static T GenericConstruct() where T : new()
{
return new T();
}
The C# compiler insist
Why is this workaround necessary?
Because the new() generic constraint was added to C# 2.0 in .NET 2.0.
Expression
So your workaround is necessary because it wasn't possible in .NET 2.0. Meanwhile, (1) using Activator.CreateInstance() was possible, and (2) IL lacks a way to implement 'new T()', so Activator.CreateInstance() was used to implement that behavior.