C#如何将嵌套集合传递给函数参数

我想用嵌套的通用集合参数调用函数。

函数名只有一个。(我想重载。在这种情况下,函数名是“ Push”)

这是完整的可运行代码。

using System;
using System.Collections.Generic;

namespace ApplicationTest
{
    class Program
    {
        static void Push(int Data_)
        {
        }

#if false // I don't want to make all these functions
        static void Push(List<int> Data_)
        {
        }
        static void Push(List<List<int>> Data_)
        {
        }
        // ... and more
#endif

#if true // Try 1
        static void Push(object Data_)
        {
            switch (Type.GetTypeCode(Data_.GetType()))
            {
                case TypeCode.Int32:
                    Push((int)Data_);
                    break;
                case TypeCode.Object:
                    {
                        if (Data_.GetType().IsGenericType)
                        {
                            if (Data_.GetType().GetGenericTypeDefinition() == typeof(List<>))
                            {
                                // runtime Error  by calling (B), (C)
                                foreach (var i in ((List<object>)Data_)) // ------(1)
                                    Push(i); // --------------------------------- (2)

                                return;
                            }
                        }
                    }
                    break;
            }
        }
#elif true // Try 2
        static void Push<TValue>(List<TValue> Data_)
        {
            foreach (var i in Data_)
                Push(i); // compile Error --------------------------------------- (3)
                         // I want that calling (2) would call
                         //      Push(int Data_) by calling (B)
                         //  or  Push<TValue>(List<TValue> Data_) again by calling (C)
        }
#endif
        static void Main(string[] args)
        {
            int i = 0;
            Push(i); // (A) ---  Ok this Calls Push(int Data_)

            List<int> l = new List<int>();
            Push(l); // (B) --- Not Ok

            List<List<int>> ll = new List<List<int>>();
            ll.Add(new List<int>());
            Push(ll); // (C) --- Not Ok

            // ... and more
        }
    }
}

我尝试了代码(尝试1)和(尝试2),但是失败了。

我想递归调用(1)和(2)(或其他更好的方法?)。

在(1)或(3),我该怎么办?

谢谢您的回答。

评论