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 循环。
可行吗?
我不确定尝试使它通用会为您带来任何好处。
所以,首先假设它只需要一个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)
通过使用递归,我们可以根据需要获得尽可能多的循环级别。