Можно ли объявить анонимный тип в C # с переменным / динамическим набором полей?

В C # я хотел бы выяснить, возможно ли объявить анонимный тип, где поля не известны до времени выполнения.

Например, если у меня есть список пар ключ / значение, могу ли я объявить анонимный тип на основе содержимого этого списка? Конкретный случай, с которым я работаю, - это передача параметров в Dapper, где я заранее не знаю, сколько у меня будет параметров.

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

Я хотел бы преобразовать этот Список (или эквивалентную Карту) в анонимный тип, который я могу передать в Dapper в качестве параметров запроса. Поэтому в идеале приведенный выше список должен выглядеть примерно так, если его определить как анонимный тип:

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

Я видел несколько вопросов о StackOverflow, спрашивающих опростирающийся анонимные типы после того, как они объявлены («объекты exteo»), или объявление произвольных полей в объекте после его создания, но мне не нужно этого делать ... Мне просто нужно один раз объявить динамически типы заранее. Я подозреваю, что это потребует некоторой фантазии, если это вообще возможно.

Насколько я понимаю, компилятор определяет тип для анонимных классов под капотом во время компиляции, поэтому, если поля этого класса недоступны до времени выполнения, мне может не повезти. Мой вариант использования на самом деле может не отличаться в действительности от использования «объекта расширения» для определения произвольных полей, когда бы то ни было.

В качестве альтернативы, если кто-нибудь знает лучший способ передачи параметров запроса в Dapper (вместо объявления анонимного класса), я также хотел бы услышать об этом.

Спасибо!

ОБНОВИТЬ

Извините за задержку с возвращением к этому! Все эти ответы были великолепны, я хотел бы дать очки всем. В итоге я использовал решение jbtule (с редактором Сэмом Саффроном), передав IDynamicParameters Dapper, поэтому я чувствовал, что должен дать ему ответ. Другие ответы тоже были хорошими и отвечали на конкретные вопросы, которые я задавал. Я действительно ценю время каждого на этом!

Ответы на вопрос(3)

Ваш ответ на вопрос