C#:如何使用变量嵌套和变量类型遍历嵌套列表中的所有元素?

Gul*_*zar 0 c# generics nested multidimensional-array

我想创建一个函数

void StringFromNestedList<T>(T theList);
Run Code Online (Sandbox Code Playgroud)

theList 可以是诸如

List<List<List<List<double>>>>
List<List<int>>
List<List<List<SomeCustomType>>>
Run Code Online (Sandbox Code Playgroud)

等等。

让我们假设对于每个元素,我想激活一个假设所有元素都具有的功能,例如 ToString()

如果我知道每个列表的嵌套数量和大小,例如 2 个级别,每个级别 4 个元素,我会做类似的事情

for (var i = 0; i < 4; i++)
{
    for (var j = 0; j < 4; j++)
    {
        theList[i][j].ToString(); // yes, it doesnt really do anything
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道需要多少个 for 循环。

可行吗?

Dam*_*ver 6

我不确定尝试使它通用会为您带来任何好处。

所以,首先假设它只需要一个object.

void StringFromPossibleList(object theList)
Run Code Online (Sandbox Code Playgroud)

现在,假设我们不想处理列表而是处理任何可枚举的东西。进一步假设我们已经让这个函数工作了——然后对于我们可枚举中的每个项目,我们可以递归地调用自己!

{
    var enu = theList as IEnumerable;
    if(enu!=null)
    {
        foreach(var item in enu)
        {
            StringFromPossibleList(item);
        }
    }
    else
    {
        theList.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

通过使用递归,我们可以根据需要获得尽可能多的循环级别。