possível declarar um tipo anônimo em C # com um conjunto de campos variável / dinâmic

Em C #, gostaria de descobrir se é possível declarar um tipo anônimo em que os campos não sejam conhecidos até o tempo de execuçã

Por exemplo, se eu tiver uma lista de pares de chave / valor, posso declarar um tipo anônimo com base no conteúdo dessa lista? O caso específico com o qual estou trabalhando é passar parâmetros para o Dapper, onde não sei antecipadamente quantos parâmetros tere

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

Gostaria de converter esta lista (ou um mapa equivalente) em um tipo anônimo que eu possa passar para o Dapper como parâmetros de consulta. Idealmente, a lista acima acabaria assim, se definida como um tipo anônimo:

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

Vi várias perguntas no StackOverflow perguntando sobre extending tipos anônimos depois que eles são declarados ("extendo objetos") ou declarando campos arbitrários em um objeto depois que ele é criado, mas não preciso fazer isso ... só preciso declarar os tipos dinamicamente uma vez. Minha suspeita é que exigirá alguma reflexão sofisticada, se é que é possíve

Meu entendimento é que o compilador define um tipo para classes anônimas sob o capô em tempo de compilação; portanto, se os campos dessa classe não estiverem disponíveis até o tempo de execução, talvez eu esteja sem sorte. Na verdade, meu caso de uso pode não ser diferente do que usar um "objeto extendo" para definir campos arbitrários, sempre que possíve

or outro lado, se alguém souber uma maneira melhor de passar parâmetros de consulta para o Dapper (em vez de declarar uma classe anônima), eu adoraria ouvir sobre isso també

Obrigado

ATUALIZA

Desculpe pela demora em voltar a este! Essas respostas foram ótimas, eu gostaria de poder dar pontos a todos. Acabei usando a solução do jbtule (com edição de Sam Saffron), passando o IDynamicParameters para o Dapper, então senti que tinha que dar a resposta a ele. As outras respostas também foram boas e responderam a perguntas específicas que eu havia feito. Eu realmente aprecio o tempo de todos nisso!

questionAnswers(3)

yourAnswerToTheQuestion