có cách nào để đặt Func<>
đối số kiểu động không, vì vậy tôi không phải sử dụng câu hỏi if
vô tận?Tự động đặt Func <> loại
Cái gì như:
Type t = Type.GetType("System.Decimal");
Func<t> foo = new Func<t>(some_function);
Thay vì:
Func<Decimal> foo = new Func<Decimal>(some_function);
UPDATE:
Dưới đây là một đoạn trích từ mã của tôi:
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 là chuỗi - tên của một thuộc tính ide "StavkaDokumenta" lớp. pd.Expression là biểu thức chuỗi phải đánh giá loại Polje. stavka là một thể hiện của StavkaDokumenta.
Nếu bạn đang sử dụng ifs vô tận, có thể có điều gì đó về cách tiếp cận hiện tại của bạn có thể được cải thiện? Tôi ít nhất cũng sẽ xem xét nó. – Botz3000
Bạn có thể cung cấp ví dụ về chuỗi vô tận mà bạn đang cố gắng giải quyết không? – GregC
Nếu bạn đang sử dụng vô tận 'xxx là SomeType', có thể có điều gì đó sai với thiết kế của bạn. –