title: how to correct the parameter count mismatch
body: <p>How can I correct this error I'm having  </p>
  
  <blockquote>
    <p>TargetParameterCountException was unhandled by user code. Parameter count mismatch.</p>
  </blockquote>
  
  <p>This is my code where it's happening</p>
  
  <pre><code>public static void InvokeMethod(string className, string methodName, string fileName)
  {
      var t = Type.GetType(className);
      using (StreamReader f = new StreamReader("params.txt"))
      {
          t.GetMethod(methodName).Invoke(t.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }), new object[] { f.ReadLine() });
      }
  }
  </code></pre>
  
  <p>This is the whole code</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Reflection;
  using System.IO;
  
  class MyClass
  {
      private int i;
      public double d;
      private string s;
      public bool b;
      public MyClass()
      {
          i = 1;
          d = 0.1;
          s = "1";
          b = true;
      }
      public void Method0()
      {
          Console.WriteLine("Method with no arguments, no return value.");
      }
      private int Method1(int arg0)
      {
          Console.WriteLine("The method returns int, int gets.");
          return arg0;
      }
      private double Method2(int arg0, double arg1)
      {
          Console.WriteLine("Method returns a double, taking int and double.");
          return arg1 * arg0;
      }
      public bool Method3(string arg0)
      {
          Console.WriteLine("Method returns a bool, accepts string");
          return arg0.Length&gt;10;
      }
      public bool Method3(string arg0,string arg1)
      {
          Console.WriteLine("The method takes two arguments string.");
          return arg0 == arg1;
      }
      public static char Method4(string arg0)
      {
          Console.WriteLine("Method returns a char, accepts string. .");
          Console.WriteLine(arg0);
          return arg0[1];
      }
      public void Method5(int arg0, double arg1)
      {
          Console.WriteLine("arg1 = {0} arg2 = {1}.",arg0,arg1);
      }
  }
  
  class MyTestClass
  {
      public static string[] GetMethodsWithStrParams(string className)
      {
          var t = Type.GetType(className);
          List&lt;string&gt; res = new List&lt;string&gt;();
          foreach (var method in t.GetMethods())
          {
              foreach (var param in method.GetParameters())
              {
                  if (param.ParameterType == typeof(string))
                  {
                      res.Add(method.Name);
                      break;
                  }
              }
          }
          return res.ToArray();
      }
      public static void InvokeMethod(string className, string methodName, string fileName)
      {
          var t = Type.GetType(className);
          using (StreamReader f = new StreamReader("params.txt"))
          {
              t.GetMethod(methodName).Invoke(t.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }),
                                             new object[] { f.ReadLine() });
          }
      }
  }
  
  class Program
  {
      static void Main(string[] args)
      {
          string name = "MyClass";
  
          foreach (var x in MyTestClass.GetMethodsWithStrParams(name))
          {
              Console.WriteLine(x);
          }
  
          MyTestClass.InvokeMethod("MyClass", "Method5", "params.txt");
  
          Console.ReadKey(true);
      }
  }
  </code></pre>