-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
Description
Is your feature request related to a problem? Please describe.
new() generic constraint was introduced in the same C# version as generics themselves (C# 2). Its implementation under the hood requres to call Activator.CreateInstance<T>() for what user writes as new T() in the source code. ILSpy always decompiles Activator.CreateInstance<T>() into new T() and there is no setting to disable that. Low-level C# viewers like sharplab, .NET Lab or Compiler developer SDK would benifit is there was an option to disable such transformation to be able to present as low-level C# decompilation view as possible
Describe the solution you'd like
New API like:
namespace ICSharpCode.Decompiler;
class DecompilerSettings
{
+ public bool GenericTypeInstantiation { get; set; }
}The name is obviously not final here, maybe you can suggest something better. By default the setting is true for C# 2 and above, which represents current behavior, but can be set to false, in which case Activator.CreateInstance<T>() are not transformed to new T() even for a generic T with new() constraint
Additional context
The use case here seems very specific, but I believe implementation and maintaining this option is very straight-forward, this is probably a matter of 1 if somewhere in the codebase