Не могу использовать конвертер в списке кортежей - PullRequest
2 голосов
/ 25 июня 2019

Прежде всего, мой код ссылки System.ValueTuple.

У меня есть список кортежей:

List<(string, string)> theme

и я хотел бы преобразовать первую строку кортежа в DateTime за один раз, поэтому я пытаюсь создать конвертер для использования с List.ConvertAll. Это не дает ошибку:

var conv = new Converter<string,DateTime>(x => DateTime.ParseExact(x, "yyyy-MM-dd", null));

но, очевидно, это не то, что мне нужно. Когда я пытаюсь просто использовать кортежи как ввод / вывод для лямбды, я получаю сообщение об ошибке:

(Делегат 'Converter) <(строка, строка), (DateTime, строка)>' не принимает двух аргументов)

var conv = new Converter<(string,string),(DateTime,string)>
           ( (x,y) => (DateTime.ParseExact(x, "yyyy-MM-dd", null),y) );

Но я не передаю два аргумента. Или я ??? Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 25 июня 2019

Я думаю, это должно работать?

var conv = new Converter<(string, string), (DateTime, string)>(x => (DateTime.ParseExact(x.Item1, "yyyy-MM-dd", null), x.Item2));
2 голосов
/ 25 июня 2019

Ваша вторая попытка очень близка. В следующем утверждении (x,y) подразумевает, что будут переданы два аргумента:

new Converter<(string,string),(DateTime,string)>((x,y) => (DateTime.ParseExact(x, "yyyy-MM-dd", null),y));

Однако Tuple, который он получит, является единственным аргументом, и поэтому утверждение должно быть:

new Converter<(string,string),(DateTime,string)>(x => (DateTime.ParseExact(x.Item1, "yyyy-MM-dd", null),x.Item2));
...