Вот решение, которое я использовал. Мне нужно было передать несколько аргументов, и я не хотел использовать что-либо, что мешало бы мне редактировать метод во время выполнения, поэтому я пришел к этому.
Очевидно, что если вы хотите, вы можете изменить его на универсальный метод (правильный термин?), Используя аргументы типа. Это также позволяет обойти проблему лямбд в методе. Не уверен, относится ли это также к анонимным методам или нет, но это уже отдельно, так что ничего страшного.
Я не знаю, отразится ли отражение на производительности или нет.
private Predicate<ItemData> FindItemData(string search, string fieldName)
{
var field = typeof(ItemData).GetField(fieldName);
return delegate(ItemData item) { return (string)field.GetValue(item) == search; };
}
//in another method...
itemlist.Find(FindItemData(e.Row[2].ToString(), "ItemName"));