C#使用引用已分配变量的分配列表

时间:2011-12-01 19:09:52

标签: c# .net-4.0 lambda

有没有人知道一个允许我做这样的事情的技巧(函数是Func<bool>

        UnaryNode<bool> compliment = new UnaryNode<bool>()
            { Function = () => !compliment.Right.Value };

以下有效,但不太好。

        UnaryNode<bool> compliment = new UnaryNode<bool>();
        compliment.Function = () => !compliment.Right.Value;

2 个答案:

答案 0 :(得分:2)

langauge specification中所述,这是不允许的。第7.6.10.2节:

  

对象初始化程序无法引用新的   创建的对象正在初始化。

我也不会发现你的第二个版本不是“好”。至于“诡计”,它会变得更“丑陋”。你需要创建一个临时的一次性,然后依赖lambda来关闭变量而不是值。例如,给定:

class Foo
{
    public Func<bool> Function;     
    public Bar Bar;
}

class Bar
{
    public bool Value;
}

然后你可以

// DO NOT try this at home
Foo foo = null; 
Foo temp = new Foo { Function = () => !foo.Bar.Value };
foo = temp;

bool result1 = foo.Function(); // true
foo.Bar.Value = true;
bool result2 = foo.Function(); // false

这或多或少比现有的“好”吗?

答案 1 :(得分:1)

也许你可以创建一个新类。

class ComplimentUnaryNode : UnaryNode<bool>
{
    public ComplimentUnaryNode()
    {
        Function = () => !Right.Value;
    }
}