c# - 在类层次结构中查找最小值

标签 c#

给定以下类(假设它们已填充),您将如何找到 test1 实例的任何 val 的最小值?

    public class test1
    {
        public int val;
        public List<test2> Tests;
    }

    public class test2
    {
        public int val;
        public List<test3> Tests;
    }

    public class test3
    {
        public int val;
        public List<test4> Tests;
    }

    public class test4
    {
        public int val;
    }

最佳答案

您可以在顶级类中编写一个方法,将结构展平为 IEnumerable。

public IEnumerable<int> FlattenVal()
{
    yield return this.val;
    foreach (var t2 in this.Tests)
    {
        yield return t2.val;
        foreach (var t3 in t2.Tests)
        {
            yield return t3.val;
            foreach (var t4 in t3.Tests)
            {
                yield return t4.val;
            }
        }
    }
}

那么你可以这样调用它:

var t = new Test1();

Console.WriteLine(t.FlattenVal().Min());

如果您不能将方法直接添加到类(非部分的、代码生成的或在库中),那么您可以使用扩展方法:

public static IEnumerable<int> FlattenVal(this Test1 t1)
{
    yield return t1.val;
    foreach (var t2 in t1.Tests)
    {
        yield return t2.val;
        foreach (var t3 in t2.Tests)
        {
            yield return t3.val;
            foreach (var t4 in t3.Tests)
            {
                yield return t4.val;
            }
        }
    }
}

关于c# - 在类层次结构中查找最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1162433/

相关文章:

c# - 使用复杂的 XML 数据将 XML 转换为 JSON

c# - XslCompiledTransform 使用 UTF-16 编码

c# - 如何从 Azure Cloud Function 引用 "Portable".NET 程序集?

c# - 什么是 Entity Framework fluent api?

c# - 如何在运行时获取构建配置?

c# - 有没有办法在 VS2008 之外的安装项目中执行 "Refresh Dependencies"?

c# - 动态创建 Func<T,TR> C#

c# - asp.net MVC 中的 JSON 序列化

c# - 获取数组长度的表达式

c# - 在SharePoint 2010中自定义功能区控件