Poiché esiste un sovraccarico del costruttore che accetta un array di caratteri, questo dovrebbe funzionare:
var bar = new string(foo.Select(x => x).ToArray());
Che praticamente elimina la necessità di un altro sovraccarico del costruttore, in quanto il sovraccarico proposto dovrebbe essenzialmente fare la stessa cosa.
Eric Lippert spesso discute il motivo per cui alcune funzionalità non lo fanno nel .NET Framework o nel linguaggio C #. Dice:
The answer is always the same: because no one ever designed,
specified, implemented, tested, documented and shipped that feature.
All six of those things are necessary to make a feature happen. All of
them cost huge amounts of time, effort and money.
In altre parole, ogni funzione deve avere vantaggi che superano tali costi e il team .NET ha deciso in questa istanza che il costruttore extra non ne valeva la pena.
Ulteriori letture
Il modo migliore per convertire IEnumerable in stringa?