有没有人知道一个允许我做这样的事情的技巧(函数是Func<bool>
:
UnaryNode<bool> compliment = new UnaryNode<bool>()
{ Function = () => !compliment.Right.Value };
以下有效,但不太好。
UnaryNode<bool> compliment = new UnaryNode<bool>();
compliment.Function = () => !compliment.Right.Value;
答案 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;
}
}