static Func<TResult> ConvertFunc<T, TResult>(Func<T, TResult> f1, T t)
{
return () => f1(t);
}
Этот вид кода для меня выглядит немного опасно - не то, чтобы само по себе что-то не так, но нужно быть осторожным .Вы используете замыкание для встраивания входной переменной в функцию.Но это может привести к трудным ошибкам, так как, если переменная изменится между преобразованием Func
и его запуском, результат будет другим.
Мне просто любопытно, какая будет польза.Вы пытаетесь скрыть входной параметр от потребителя функции?Пока переменная является локальной, переданной ей, все будет в порядке.
С точки зрения решения ее не будет, поскольку .NET создал 16 различных универсальных Func<>
точно по той же причине.
Возможно, вы можете использовать отражение для реализации решения, но вы будете платить штраф за вызов функций.MethodInfo.GetGenericArguments()
даст вам типы, и вы сможете использовать MethodInfo.MakeGenericMethod()
для создания новых.
Обновление
Просто чтобы проиллюстрировать мою точку зрения:
static int Double(int number)
{
return number * 2;
}
static void Main(string[] args)
{
int i = 2;
Func<int> f = () => Double(i);
i = 3;
Console.WriteLine(f()); // prints 6 and not 4
}