将嵌套数组 class 转换为另一个嵌套数组 class c#

Convert nested array class to another nested array class c#

我有 2 个 classes,它们看起来完全一样,但位于不同的命名空间中。嵌套的 class 中的一个 属性 本身就是一个数组,它允许 属性 nesting/recursion (有点像命令模式)

我正在尝试 convert/cast 从一个命名空间中的 class 到另一个命名空间中的 class。我有以下代码:

    namespace Common.Class
    {
        public class Root
        {
            public string Key { get; set; }
            public Child[] Children { get; set; }
            public class Child
            {
                public string Content { get; set; }
                public Child[] RecursionChild { get; set; }
            }
        }
    }
    namespace Uncommon.Class
    {
        class Root
        {
            public string Key { get; set; }
            public Child[] Children { get; set; }
            public class Child
            {
                public string Content { get; set; }
                public Child RecursionChild { get; set; }
            }
        }
    }

主程序

        static void Main(string[] args)
        {
            var commonRoot = new Common.Class.Root
            {
                Key = "1234-lkij-125l-123o-123s",
                Children = new Common.Class.Root.Child[]
                {
                    new Common.Class.Root.Child
                    {
                        Content = "Level 1 content",
                        RecursionChild = new Common.Class.Root.Child[] { }
                    }
                }
            };


            var uncommonRoot = new Uncommon.Class.Root
            {
                Key = commonRoot.Key,
                Children = commonRoot.Children // here I get error: Cannot implicitly convert type 'Common.Class.Root.Child[]' to 'Uncommon.Class.Root.Child[]'
            };
        }

你也需要转换children。

因为你有那个递归 child,你不能只用匿名函数来实现它,因为函数必须能够调用自己,你需要一个名字。所以我们需要引入一个具有真实名称的局部函数,例如Converter.

Uncommon.Root.Child Converter(Common.Root.Child source) => new Uncommon.Root.Child
{
    Content = source.Content, 
    RecursiveChild = Converter(source.ResursiveChild) 
};

var uncommonRoot = new Uncommon.Class.Root
{
    Key = commonRoot.Key,
    Children = commonRoot.Children.Select(Converter).ToArray();
};