Mam następujący kod:Generic Metoda Wykonane z typem wykonawczego
public class ClassExample
{
void DoSomthing<T>(string name, T value)
{
SendToDatabase(name, value);
}
public class ParameterType
{
public readonly string Name;
public readonly Type DisplayType;
public readonly string Value;
public ParameterType(string name, Type type, string value)
{
if (string.IsNullOrEmpty(name))
throw new ArgumentNullException("name");
if (type == null)
throw new ArgumentNullException("type");
this.Name = name;
this.DisplayType = type;
this.Value = value;
}
}
public void GetTypes()
{
List<ParameterType> l = report.GetParameterTypes();
foreach (ParameterType p in l)
{
DoSomthing<p.DisplayType>(p.Name, (p.DisplayType)p.Value);
}
}
}
Teraz wiem, że nie można wykonać doSomething() jest jakiś inny sposób, aby korzystać z tej funkcji?
Tylko jeden połów, p.Value to ciąg znaków, więc wywołanie zakończy się niepowodzeniem, chyba że p.DisplayType stanie się typem (string). – stevemegson
Szkoda, że to jedyne rozwiązanie, meh. –
Myślę, że możesz użyć dynamicznego w wersji 4.0, i to on wyprowadzi poprawny ogólny typ argumentu, ale nie miałem jeszcze okazji go zweryfikować. Nie chodzi o to, że pod osłonami robi coś innego niż powyższy kod, ale może tak jest. –