Реализация обобщений в функции с использованием Func

У меня есть следующая статическая функция:

public static string codeList<T>(List<T> thelist, Func<T, string> coder);

использование этой функции с моими собственными объектами не является проблемой, например:

string code = codeList<MyClass>(myclassList, MyClass.code);

Где MyClass.code - статическая функция (определенная в MyClass), которая получает MyClass и возвращает строку.

Проблема в том, когда я пытаюсь использовать эту функцию с List<int> или же List<double> что я делаю сейчас, это предопределение статики, как Func<int,string> intCoder = (x) => x.ToString(); а также Func<double,string> (x) => x.ToString(); и использовать их. Есть ли другой способ сделать это? что-то вроде:

string code = codeList<int>(intList, Int32.ToString);

2 ответа

Решение

Вы можете сделать это с

string code = codeList<int>(intList, Convert.ToString);

Просто так получилось, что Convert.ToString имеет перегрузку с соответствующей подписью.

Проблема с int.ToString является то, что ни одна из его перегрузок не имеет соответствующей подписи (они не принимают int параметр как это подразумевается). В этом случае вы ничего не сможете сделать, кроме определения функции адаптера.

Вам не нужно объявлять переменную для функции. Вы можете просто поместить лямбда-выражение в качестве значения параметра

string code = codeList(intList, i => i.ToString());
Другие вопросы по тегам