#c# #.net-core
Вопрос:
Мне нужно прочитать «Продукты» в переменной списка<(строка,строка [])>. appsettings.json:
{
"Products": [
{"fruits":["apple","cherry","tomato"]},
{"vegetables":["carrot","tomato"]}
]
}
Примечание: Пожалуйста, предположите, что я не могу изменить этот формат ввода appsettings.json. Но переменная также может быть массивом значений, а не списком значений. Формат ValueTuple должен быть (категория строки,элементы строки []).
Спасибо @Serge за отличный ответ ! Я уверен, что я не один борюсь с linq и этим конфигурационным файлом.
Ответ №1:
попробуйте это
var products = Configuration
.GetSection("Products")
.Get<Dictionary<string, string[]>[]>()
.SelectMany(i => i)
.Select(i => new Tuple<string, string[]>(i.Key, i.Value)) // or you can convert here to any class
.ToList();
Комментарии:
1. Это очень элегантно ! Я попробовал, и это работает просто великолепно. Спасибо!
2. Мы вам очень рады!
3. Я использовал это «Выберите(i => (i.Ключ, i.Значение))», так как мне нужен System.ValueTuple. Интересно, что «новое» меняет.
4. Кортежи очень хитры. Я бы предпочел оставить пару значений ключа или преобразовать в конкретный класс
5. На данный момент я буду придерживаться ValueTuple, так как он предлагает преимущества, которые я ищу, например, переименование полей Item1 и Item2, изменяемых, IComparable и IStructuralEquatable.