Reflection for calling a constructor using ConstructorInfo

In a very simple class, as shown below,

class Program { public Program(int a, int b, int c) { Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); } } 

and I use reflection to call the constructor

something like that...

  var constructorInfo = typeof(Program).GetConstructor(new[] { typeof(int), typeof(int), typeof(int) }); object[] lobject = new object[] { }; int one = 1; int two = 2; int three = 3; lobject[0] = one; lobject[1] = two; lobject[2] = three; if (constructorInfo != null) { constructorInfo.Invoke(constructorInfo, lobject.ToArray); } 

But I get an error: "the object does not match the constructor information of the target type."

any help / comments are greatly appreciated. thanks in advance.

+4
source share
1 answer

You do not need to pass constructorInfo as a parameter as soon as you call the constructor, but not the object instance method.

 var constructorInfo = typeof(Program).GetConstructor( new[] { typeof(int), typeof(int), typeof(int) }); if (constructorInfo != null) { object[] lobject = new object[] { 1, 2, 3 }; constructorInfo.Invoke(lobject); } 

For KeyValuePair<T,U> :

 public Program(KeyValuePair<int, string> p) { Console.WriteLine(string.Format("{0}:\t{1}", p.Key, p.Value)); } static void Main(string[] args) { var constructorInfo = typeof(Program).GetConstructor( new[] { typeof(KeyValuePair<int, string>) }); if (constructorInfo != null) { constructorInfo.Invoke( new object[] { new KeyValuePair<int, string>(1, "value for key 1") }); } Console.ReadLine(); } 
+10
source

Source: https://habr.com/ru/post/1447870/


All Articles