IDictionary<string, string> map = str.Split('|')
.ToDictionary(s => s.Split('@')[0], s => s.Split('@')[1]);
Вышеуказанное утверждение работает. Но я хотел бы изменить его на общий для 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));
}
и ConvertValue
бросить расщепленные строки к типу TKey
и TValue
.
Но я получил эти ошибки для ConvertValue
частей:
ошибка CS1660: Не удается преобразовать лямбда-выражения к типу «строка», потому что это не тип делегата
ошибка CS1660: Не удается преобразовать лямбда-выражения с типом 'string', потому что это не тип делегата
Я не уверен, что означают ошибки или как решить эту проблему.
Правильный термин «дженерики», а не «шаблоны». Шаблоны - это то, что имеет C++. –
@JohnSaunders: .. * изменить его на ** шаблон ** для IDictionary * <= вы пропустили один .. –