Я бы использовал linq.Преобразуйте строку в массив с разделителями.
Установите словарь, содержащий первый элемент ... не уверен, хотите ли вы это сделать.Если нет, просто удалите операторы "d1" и "union".
Запустите Linq, чтобы создать словарь на основе четных чисел.
Тогда, если вы действительно хотите учесть первый элемент,имя_файла, и вы хотите, чтобы в начале словаря вы, наконец, запустили оператор "union".
string str = "File_name,cost_per_page,0.23,color_code,343,thickness,0.01";
string[] array = str.Split(',');
Dictionary<string, string> d1 = new Dictionary<string, string>()
{
{ array[0], "" }
};
Dictionary<string, string> d2 = array.Select((i, index) => (index > 0 && index % 2 == 0) ?
new { key = array[index - 1], value = i } : null).Where(i => i != null).ToDictionary(d => d.key, d => d.value);
Dictionary<string, string> result = d1.Union(d2).ToDictionary(k => k.Key, v => v.Value);
foreach (KeyValuePair<string, string> kvp in result)
Console.WriteLine(kvp.Key + ": " + kvp.Value);
return;
другой, и, возможно, более чистый подход:
Это также относится и к File_name.Если вы не хотите этого, добавьте «index> 0» к условному оператору, где он проверяет четность.
string str = "File_name,cost_per_page,0.23,color_code,343,thickness,0.01";
string[] array = str.Split(',');
Dictionary<string, string> d2 = array.Select((i, index) => (index % 2 == 0) ?
new
{
key = (index == 0) ? i : array[index - 1],
value = (index == 0) ? "" : i
} : null).Where(i => i != null).ToDictionary(d => d.key, d => d.value);
foreach (KeyValuePair<string, string> kvp in d2)
Console.WriteLine(kvp.Key + ": " + kvp.Value);