Lambda与通用

Ire*_*Lee 3 c# generics

IDictionary<string, string> map = str.Split('|')
                                     .ToDictionary(s => s.Split('@')[0], s => s.Split('@')[1]);
Run Code Online (Sandbox Code Playgroud)

以上陈述有效.但是我想把它改成通用的IDictionary

public class CSVMap <TKey, TValue>
{
    public IDictionary<TKey, TValue>  func (string str)
    {
        IDictionary<TKey, TValue> map =  str.Split('|').ToDictionary (ConvertValue<TKey>(s => s.Split('@')[0]), ConvertValue<TValue>(s => s.Split('@')[1]));

    }
    public static T ConvertValue<T>(string value)
    {
        return (T)Convert.ChangeType(value, typeof(T));
    }
Run Code Online (Sandbox Code Playgroud)

并将ConvertValue拆分字符串转换为TKey和的类型TValue.

但我得到了这些ConvertValue部分的错误:

错误CS1660:无法将lambda表达式转换为类型'string',因为它不是委托类型
错误CS1660:无法将lambda表达式转换为类型'string',因为它不是委托类型

我不确定错误是什么意思或如何解决这个问题.

Rob*_*Kee 5

您正在将lambda表达式传递给ConvertValue函数而不是值.不确定这是否符合您的预期,但这至少是正确的语法.

IDictionary<TKey, TValue> map =  str.Split('|').ToDictionary (s=>ConvertValue<TKey>(s.Split('@')[0]), s=>ConvertValue<TValue>(s.Split('@')[1]));
Run Code Online (Sandbox Code Playgroud)