Реализация обобщений в функции с использованием 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());