Convierta Lista <string> a List <KeyValuePair <string, string >> usando Linq [duplicado]

Posible duplicado:
¿Hay alguna forma de LINQ de pasar de una lista de pares clave / valor a un diccionario?

Supongamos que tengo unList<string> como a continuación:

var input = new List<string>()
                       {
                           "key1",
                           "value1",
                           "key2",
                           "value2",
                           "key3",
                           "value3",
                           "key4",
                           "value4"
                       };

Basado en esta lista, me gustaría convertir aList<KeyValuePair<string, string>>, la razón es permitir la misma clave, por eso no uso el Diccionario.

var output = new List<KeyValuePair<string, string>>()
                       {
                           new KeyValuePair<string, string>("key1", "value1"),
                           new KeyValuePair<string, string>("key2", "value2"),
                           new KeyValuePair<string, string>("key3", "value3"),
                           new KeyValuePair<string, string>("key4", "value4"),
                       };

Puedo lograr usando el siguiente código:

var keys = new List<string>();
var values = new List<string>();

for (int index = 0; index < input.Count; index++)
{
    if (index % 2 == 0) keys.Add(input[index]);
    else values.Add(input[index]);
}

var result = keys.Zip(values, (key, value) => 
                        new KeyValuePair<string, string>(key, value));

Pero sintiendo que esta no es la mejor manera usando loop.for, ¿hay alguna otra forma en que podamos usar LINQ incorporado para lograrlo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta