对不起我的Engilsh。我有这样的课:
public class MainClass
{
public string message { get; set; }
public MainClass forward { get; set; }
}
并且有主要功能,我在这里使用类和填充数据(在实际项目中我有JSON格式的数据,其中类可以无限次地嵌入其中)类:
static void Main(string[] args)
{
MainClass clasClass = new MainClass()
{
message = "Test1",
forward = new MainClass()
{
message = "Test1_1",
forward = new MainClass()
{
message = "Test1_1_1",
forward = new MainClass()
{
message = "Test1_1_1_1",
forward = new MainClass()
}
}
}
};
}
如何在不知道其编号的情况下获取嵌套类名的数量?
答案 0 :(得分:4)
听起来你只想要递归:
public int GetNestingLevel(MainClass mc)
{
return mc.forward == null ? 0 : GetNestingLevel(mc.forward) + 1;
}
或作为MainClass
本身的一部分:
public int GetNestingLevel()
{
return mc.forward == null ? 0 : mc.forward.GetNestingLevel() + 1;
}
或者在C#6中,如果要使用空条件运算符:
public int GetNestingLevel()
{
return (mc.forward?.GetNestingLevel() + 1) ?? 0;
}
如果你有非常深度嵌套的类,那么就可能会导致问题,就吹嘘堆栈而言 - 但这可能是最简单的方法。根据M.kazem Akhgary的回答,另一种方法是使用迭代。
答案 1 :(得分:2)
你可以前进并数数!
int count = 0;
MainClass tempClass = clasClass;
while (tempClass.forward != null)
{
count++;
tempClass = tempClass.forward;
}
你也可以把它做得更小。
int count = 0;
MainClass tempClass = clasClass;
while ((tempClass = tempClass.forward) != null) count++;