In C#, is there a way to write custom object initializers for new data-types?

前端 未结 2 1097
孤街浪徒
孤街浪徒 2021-02-09 08:52

In C#, there\'s the \"standard\" initializer technique { Property1 = \"a\", Property2 = \"b\" }, and there are a couple of special variants for collections (list and dictionary)

相关标签:
2条回答
  • 2021-02-09 09:26

    Using a variadic local lambda n that simply calls your constructor, you could get it as short as:

    n(item1, n(item2, item3, item4), n(item5, item6))
    

    Update: something like

    var n = (params Node[] nodes) => new Node(nodes);
    
    0 讨论(0)
  • 2021-02-09 09:40

    If you implement the ICollection IEnumerable interface and have a method called add. Incidentally, this is all included in the ICollection interface which is why I confused it.

    Test test = new Test() {
        new Test2() {
            new Test3() {
    
            }
        },
        new Test() {
            new Test2() {
                { new Test(), new Test2() },
                { new Test(), new Test2() },
                { new Test(), new Test2() }
            }
        }
    };
    
    public class Test : IEnumerable
    {
        public void Add(Test a){}
        public void Add(Test2 a){}
        public IEnumerator GetEnumerator(){}
    }
    
    public class Test2 : IEnumerable
    {
        public void Add(Test a, Test2 b){}
        public void Add(Test3 a){}
        public IEnumerator GetEnumerator(){}
    }
    
    public class Test3 : IEnumerable
    {
        public void Add(Test a) {}
        public void Add(Test2 a){}
        public IEnumerator GetEnumerator(){}
    }
    
    0 讨论(0)
提交回复
热议问题