如何检查是否在同一类的类中?

时间:2015-11-12 08:19:40

标签: c#

对不起我的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()
                }   
            }
        }
    };
}

如何在不知道其编号的情况下获取嵌套类名的数量?

2 个答案:

答案 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++;