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:
- individuare il tipo (System.Type)
- 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# !