如何修复下面的 LinQ 笛卡尔程序并使其正常工作?

How to fix the below LinQ Cartesian program and make it working?

我正在尝试让下面的程序运行以生成 n 个列表的笛卡尔积。但是我无法成功编译它。

namespace CombiGenerator
{
    static class AppendExtension
    {
        public static IEnumerable<T> Append<T>(this IEnumerable<T> that, T item)
        {
            IEnumerable<T> itemAsSequence = new T[] { item };
            return that.Concat(itemAsSequence);
        }
    }


    public static class Program
    {

        public static void Main(string[] args)
        {

            object[] letters = { 'A', 'B', 'C' };
            object[] numbers = { 1, 2, 3, 4 };
            object[] colours = { "Red", "Blue" };

            var cartesianProduct = CartesianProduct(letters, numbers, colours);
            foreach (var item in cartesianProduct)
            {
                Console.WriteLine(string.Join(",", item));
            }
        }

        public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(IEnumerable<IEnumerable<T>> inputs)
        {
            return inputs.Aggregate(
                EnumerableFrom(Enumerable.Empty<T>()),
                (soFar, input) =>
                    from prevProductItem in soFar
                    from item in input
                    select prevProductItem.Append(item));
        }

        private static IEnumerable<T> EnumerableFrom<T>(T item)
        {
            yield return item;
        }
    }
}

我收到以下错误。

Error   1   No overload for method 'CartesianProduct' takes 3 arguments  
c:\users\hp 15\documents\visual studio  2013\Projects\CombiGenerator\CombiGenerator\Program.cs  30  36  CombiGenerator

问题出在以下行:

var cartesianProduct = CartesianProduct(letters, numbers, colours);

需要将字母、数字和颜色填充到 IEnumerable 中,然后传递到 CartesianProduct。

注意:我在编写新代码时默认使用示例中的列表:

object[] letters = { 'A', 'B', 'C' };
object[] numbers = { 1, 2, 3, 4 };
object[] colours = { "Red", "Blue" };

List<object[]> cartesianProducts = new List<object[]> { letters, numbers, colours };
var cartesianProduct = CartesianProduct(cartesianProducts);

您需要传入一个 IEnumerable 的 IEnumerable(我的示例中的对象数组列表),但您只是想传入三个单独的 IEnumerable(示例中的对象数组)