创建分层匿名类型

Kon*_*rin 3 c# anonymous-types

有没有办法创建引用自身实例的匿名类型?

var root = new { Name = "Root", Parent = ??? };
var child = new { Name = "Child", Parent = root };
var childOfChild = new { Name = "Grand child", Parent = child };
Run Code Online (Sandbox Code Playgroud)

例如,我们可以自己引用委托:

Action run = null;
run = () => run();
Run Code Online (Sandbox Code Playgroud)

另一个例子,我们可以创建匿名类型的通用堆栈:

static Stack<T> CreateStack<T>(params T[] values)
{
    var stack = new Stack<T>();

    foreach (var value in values)
        stack.Add(value);

    return stack;
}
Run Code Online (Sandbox Code Playgroud)

你能想到从自己引用匿名类型的任何方法吗?

Eri*_*ert 9

C#中的匿名类型是不可变的.因此,所有字段值必须在创建对象之前存在,并且永远不会更改.因此,在C#中直接循环引用匿名类型是不可能的.

VB中的匿名类型是可变的; 你可能想出一些在VB中做的方法.

可能有一种方法可以使匿名类型间接引用自身,例如,包含一个委托,该委托在被调用时返回匿名类型的实例.我没有看到任何方法轻易做到这一点,但我也没有看到证明这样做是不可能的.仔细考虑一下,看看你想出了什么!

我认为这个问题仅用于娱乐目的.如果你想制作一个圆形参考物体,请做一个名义上的类型.