In questi giorni mi sono trovato di fronte ad un piccolo problemino da risolvere. Ho due stringhe:

string value = "123";
string function = "System.Convert.ToInt32(value)";

Vorrei eseguire la seconda passando il parametro della prima. Niente di che, soprattutto se fatto in VB, VB.NET o cone le librerie .NET di VB. Ma il mio accanimento su C# mi impone di usare solo C# :-) per queste cose, la reflection viene sempre in aiuto. In particolare ci serve fare due cose:

  1. individuare il tipo (System.Type)
  2. eseguire il metodo

Il primo punto lo si ricava con una funzioncina che analizza la stringa:

static string GetTypeByName(string name)
{
    string[] names = name.Split('.');
    StringBuilder res = new StringBuilder(names[0]);
    for (int i = 1; i < names.Length - 1; i++)
        res.AppendFormat(".{0}", names[i]);
    return res.ToString();
}

Essento un metodo statico non dobbiamo neppure creare l'istanza:

MethodInfo method = Type.GetType(GetTypeByName(function)).GetMethod(
    "ToDouble",
    new Type[] { typeof(string)} );
Console.WriteLine( method.Invoke(null, new object[] { value }) );

Il gioco è fatto, anche in C# !