using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
namespace Test_console_application
{
class Program
{
static void Main(string[] args)
{
var parentPropertyName = "Measurements";
var parentPropertyType = typeof (Measurement);
var propertyName = "Data";
var parameterExp = Expression.Parameter(typeof(Inverter), "type");
var propertyExp = Expression.Property(parameterExp, parentPropertyName);
var method = typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public)
.Single(x => x.ToString() == "Double Min[TSource](System.Collections.Generic.IEnumerable`1[TSource], System.Func`2[TSource,System.Double])")
.MakeGenericMethod(parentPropertyType);
var minParameterExp = Expression.Parameter(parentPropertyType, "type2");
var minPropertyExp = Expression.Property(minParameterExp, propertyName);
var minMethodExp = Expression.Call(method, propertyExp, minPropertyExp);
}
}
public class Inverter
{
public IList<Measurement> Measurements { get; set; }
}
public class Measurement
{
public double Data { get; set; }
}
}
このコードを実行すると、ArgumentException が発生します。
タイプ 'System.Double' の式は、タイプ 'System.Func
2[Test_console_application.Measurement,System.Double]' of method 'Double Min[Measurement](System.Collections.Generic.IEnumerable
1[Test_console_application.Measurement]、System.Func`2[Test_console_application.Measurement,System.Double])' のパラメータには使用できません
私はそれが言っていることを理解していますが、私はminPropertyExpでそれをしていると思っていました.
何を変更する必要があるのか わかりません-手がかりはありますか?