title: C# reflection - load assembly and invoke a method if it exists
body: <p>I want to load an assembly (its name is stored in a string), use reflection to check if it has a method called "CustomType MyMethod(byte[] a, int b)" and call it or throw an exception otherwise. I guess I should do something like this, but would appreciate if someone could offer same advice on how best to do it:</p>
  
  <pre><code>Assembly asm = Assembly.Load("myAssembly"); /* 1. does it matter if write myAssembly or myAssembly.dll? */
  
  Type t = asm.GetType("myAssembly.ClassName");
  
  // specify parameters
  byte[] a = GetParamA();
  int b = GetParamB();
  
  object[] params = new object[2];
  params[0] = a;
  params[1] = b;
  
  /* 2. invoke method MyMethod() which returns object "CustomType" - how do I check if it exists? */
  /* 3. what's the meaning of 4th parameter (t in this case); MSDN says this is "the Object on which to invoke the specified member", but isn't this already accounted for by using t.InvokeMember()? */
  CustomType result = t.InvokeMember("MyMethod", BindingFlags.InvokeMethod, null, t, params);
  </code></pre>
  
  <p>Is this good enough, or are there better/faster/shorter ways? What about constructors, given that these methods are not static - can they simply be ignored?</p>
  
  <p>When invoking void Methods(), is it ok to just write t.InvokeMember(...) or should you always do Object obj = t.InvokeMember(...)?</p>
  
  <p>Thanks in advance.</p>
  
  <hr>
  
  <p><strong>EDIT</strong>
  I have provided a working example as a separate answer below.</p>