Probably simple but could not figure out. I am loading an assembly at runtime and browsing through some classes and generating input controls for its properties. To create an instance of an object at runtime I am using:
object o = PropertyType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, null, Type.EmptyTypes,null).Invoke(null);
and it works fine for class types. When the type is an array, I use
object o = PropertyType.Type.GetConstructor(new Type[] { typeof(int) }).Invoke(new object[] { 0 });
which also works fine. But when it comes to string type or value types GetConstructor.Invoke does not work. I also tried Activator.CreateInstance which also did not work.
What you’re running into is that value types don’t really have parameterless constructors. C# makes it look like they do, but they don’t at the CLR level.
Activator.CreateInstanceshould work fine for real value types though:This will always give the default value for any value type.
Now, you’re asking about strings – what string would you expect to create? The default value for the
stringtype is null – but would you want the empty string instead? If so, you’ll need to special-case that code.