No one answers my question in Difference between Activator.CreateInstance() and typeof(T).InvokeMember() with BindingFlags.CreateInstance. I guess that the issue is closed and I am asking here again.
Ben M have a nice function which I need for a project. The function is –
public static T CreateInstance<T>()
{
bool bNeedSecurityCheck = true;
bool canBeCached = false;
RuntimeMethodHandle emptyHandle = RuntimeMethodHandle.EmptyHandle;
return (T) RuntimeTypeHandle.CreateInstance(typeof(T) as RuntimeType, true, true, ref canBeCached, ref emptyHandle, ref bNeedSecurityCheck);
}
I am using .NET 3.5 and Visual studio 2008. It gives the error “EmptyHandle type name does not exist in the type System.RuntimeMethodHandle”.
Then I used “RuntimeMethodHandle emptyHandle = new RuntimeMethodHandle();”. Another error presents. RuntimeTypeHandle does not have a CreateInstance method either. Activator has. But it does not take any ref parameter.
Thanks for clarification in advance!
EmptyHandleis an internal static property onRuntimeMethodHandle. From Reflector:Luckily, you don’t have to implement the method yourself – use
Activator.CreateInstance<T>(Ben M’s ‘nice function’ was just the decompiled source code for that .NET class method).