jest jakiś sposób, aby ustawić argumenty typu Func<>
dynamicznie, więc nie muszę używać niekończących if
instrukcji?Dynamicznie ustawiać Func <> typy
Coś jak:
Type t = Type.GetType("System.Decimal");
Func<t> foo = new Func<t>(some_function);
Zamiast:
Func<Decimal> foo = new Func<Decimal>(some_function);
UPDATE:
Oto fragment z mojego kodu:
Type t = typeof(StavkaDokumenta).GetProperty(pd.Polje).PropertyType;
ParameterExpression pe = Expression.Parameter(typeof(StavkaDokumenta), "stavka");
Expression expr = Expressions.ResolveCompleteExpression(pe, pd.Expression);
Expression final = Expression.Convert(expr, t);
if (t == typeof(decimal))
{
var lambda = Expression.Lambda<Func<StavkaDokumenta, decimal>>(final, pe);
o = lambda.Compile().Invoke(stavka);
}
if (t == typeof(decimal?))
{
var lambda = Expression.Lambda<Func<StavkaDokumenta, decimal?>>(final, pe);
o = lambda.Compile().Invoke(stavka);
}
else if (t == typeof(int))
{
var lambda = Expression.Lambda<Func<StavkaDokumenta, int>>(final, pe);
o = lambda.Compile().Invoke(stavka);
}
else if (t == typeof(int?))
{
var lambda = Expression.Lambda<Func<StavkaDokumenta, int?>>(final, pe);
o = lambda.Compile().Invoke(stavka);
}
else if (t == typeof(string))
{
var lambda = Expression.Lambda<Func<string>>(final, null);
o = lambda.Compile().Invoke();
}
pd.Polje jest ciąg - nazwa nieruchomości ins ide "StavkaDokumenta" klasa. pd.Expression jest wyrażeniem łańcuchowym, które musi być zgodne z typem Polje. stavka jest instancją StavkaDokumenta.
Jeśli używasz nieskończonych ifs, być może jest coś w twoim obecnym podejściu, które można poprawić? Przynajmniej to rozważyłbym. – Botz3000
Czy możesz podać przykład nieskończonego łańcucha, który próbujesz rozwiązać? – GregC
Jeśli używasz nieskończonego 'xxx is SomeType', prawdopodobnie coś jest nie tak z twoim projektem. –