ere todas as combinações exclusivas de elementos de um IEnumerable (Of

Esta pergunta é praticamente a mesma queesta publicação SO, só estou procurando uma solução VB.NET (.NET 4). Eu girei minhas rodas por tempo suficiente tentando encontrar uma solução genérica para resolver esse problema de "conjunto de potência"

Dado

Dim choices As IEnumerable(Of String) = {"Coffee", "Tea", "Milk", "Cookies"}
Dim choiceSets = choices.CombineAll()

Estou procurando porchoiceSets ser umIEnumerable(Of IEnumerable(Of T)) para que eu possa fazer algo como:

For each choiceSet in choiceSets
    Console.WriteLine(String.Join(", ", choiceSet))
Next

E obtenha resultados parecidos com:

Coffee
Tea
Milk
Cookies
Coffee, Tea
Coffee, Milk
Coffee, Cookies
Tea, Milk
Tea, Cookies
Milk, Cookies
Coffee, Tea, Milk
Coffee, Tea, Cookies
Coffee, Milk, Cookies
Tea, Milk, Cookies
Coffee, Tea, Milk, Cookies

Como você pode ver, isso é todo não repetitivo combinação da fonteIEnumerable(Of T) (que poderia ter de 1 a muitos itens - este exemplo tinha apenas 4), opera com base na ordem dos itens na fonteIEnumerable(Of T) e cada item da lista é> = o item anterior em termos de número de itens no interiorIEnumerable(Of T).

Pelo que vale a pena, isso não é tarefa de casa; embora com certeza pareç

EDIT: atualizado o exemplo para que não pareça que o resultado seja classificado em ordem alfabética, para enfatizar que a fonteIEnumerable(Of T) ordem existente de @ é usada e adicionada uma quarta opção para esclarecer os requisitos de classificação em cada conjunt

questionAnswers(6)

yourAnswerToTheQuestion