I have read a few bits and bobs online about this topic but found none that work for me. What I am trying to do is create a class of a runtime Type.
I use Activator.CreateInstance
which works fine for classes with constructors that contain no arguments. For those with arguments it throws an exception, is there a way around this?
I am more than happy to pass null values or empty values to the ctor so long as I can create the class itself.
There is an overload that accepts arguments as a params object[]
:
object obj = Activator.CreateInstance(typeof(StringBuilder), "abc");
Would this do? Alternative, you can use reflection to find the correct constructor:
Type[] argTypes = new Type[] {typeof(string)}; object[] argValues = new object[] {"abc"}; ConstructorInfo ctor = typeof(StringBuilder).GetConstructor(argTypes); object obj = ctor.Invoke(argValues);
I eventually ended up doing something like this - some of the commentors hinted towards this solution anyway.
I basically iterated through all available constructors and chose the simplest. I then created null data to pass into the ctor (for what Im using it for this approach is fine)
Part of the code looks a little like this
// If we have a ctor that requires parameters then pass null values if (requiresParameters) { List<object> parameters = new List<object>(); ParameterInfo[] pInfos = constructorInfos[0].GetParameters(); foreach (ParameterInfo pi in pInfos) { parameters.Add(createType(pi.ParameterType)); } return constructorInfos[0].Invoke(parameters.ToArray()); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With