Конвертировать func в предикат, используя отражение в C #

Я в основном пытаюсь сделать это , но я не знаю, каким будет T, поэтому я строю вещи, используя деревья Отражения и Выражения.

// Input (I don't know about "Book")
Type itemType = typeof(Book);

// Actual Code
// Build up func p => p.AuthorName == "Jon Skeet"
ParameterExpression predParam = Expression.Parameter(itemType, "p");
Expression left = Expression.Field(predParam, itemType.GetField("AuthorName"));
Expression right = Expression.Constant("Jon Skeet", typeof(string));
Expression equality = Expression.Equal(left, right);
Delegate myDelegate = Expression.Lambda(equality, new ParameterExpression[] { predParam }).Compile(); // Not sure if I need this

// Build up predicate type (Predicate)
Type genericPredicateType = typeof(Predicate<>);
Type constructedPredicateType = genericPredicateType.MakeGenericType(new Type[] { itemType });

// I need an instance to use this predicate, right? (** This Fails **)
object predicateInstance = Activator.CreateInstance(constructedPredicateType, new object[] { myDelegate });

В основном , У меня есть List , о котором я пытаюсь поразмышлять, и вызовите его метод Find . Для метода Find требуется Predicate вместо Func , и я несколько часов бился с этим .

Редактировать: Вот первая часть трассировки ошибок:

System.MissingMethodException: Constructor on type 'System.Predicate`1[[MyProject.Book, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' not found.

5
задан Community 23 May 2017 в 12:15
поделиться