Es posible declarar un tipo anónimo en C # con un conjunto de campos variable / dinámico?

En C #, me gustaría averiguar si es posible declarar un tipo anónimo donde los campos no se conocen hasta el tiempo de ejecución.

Por ejemplo, si tengo una lista de pares clave / valor, ¿puedo declarar un tipo anónimo basado en el contenido de esa lista? El caso específico con el que estoy trabajando es pasar parámetros a Dapper, donde no sé de antemano cuántos parámetros tendré.

List<Tuple<string, string>> paramList = new List<Tuple<string, string>>() {
    new Tuple<string, string>("key1", "value1"),
    new Tuple<string, string>("key2", "value2")
    ...
};

Me gustaría convertir esta Lista (o un Mapa equivalente) en un tipo anónimo que pueda pasar a Dapper como parámetros de consulta. Entonces, idealmente, la lista anterior terminaría luciendo así, si se define como un tipo anónimo:

new { key1=value1, key2=value2, ... }

He visto varias preguntas sobre StackOverflow sobreextensibl tipos anónimos después de ser declarados ("objetos de extensión"), o declarando campos arbitrarios en un objeto después de que se crea, pero no necesito hacer eso ... Solo necesito declarar los tipos dinámicamente por adelantado una vez. Mi sospecha es que requerirá una reflexión elegante, si es posible.

Mi comprensión es que el compilador define un tipo de clases anónimas bajo el capó en tiempo de compilación, por lo que si los campos de esa clase no están disponibles hasta el tiempo de ejecución, podría no tener suerte. De hecho, mi caso de uso puede no ser diferente en realidad que usar un "objeto extendo" para definir campos arbitrarios, siempre que sea.

lternativamente, si alguien sabe de una mejor manera de pasar parámetros de consulta a Dapper (en lugar de declarar una clase anónima), me encantaría saber sobre eso también.

¡Gracias

ACTUALIZA

¡Perdón por la demora en volver a este! Estas respuestas fueron geniales, ojalá pudiera dar puntos a todos. Terminé usando la solución de jbtule (con edición de Sam Saffron), pasando los parámetros dinámicos a Dapper, así que sentí que tenía que darle la respuesta. Las otras respuestas también fueron buenas y respondieron preguntas específicas que había hecho. ¡Realmente aprecio el tiempo de todos en esto!

Respuestas a la pregunta(3)

Su respuesta a la pregunta