我想将一个对象(目前为 null,但稍后会创建)传递给另一个对象的构造函数,如下所示:
State state1 = null;
State state2 = null;
State state3 = null;
state3 = new State(new char[] { '1', '0', '@' },
new Transition[] { new Transition(ref state3, '1', Movement.H),
new Transition(ref state3, '0', Movement.H),
new Transition(ref state3,'@', Movement.H)}, true);
state1 = new State(new char[] { '1', '0', '@' },
new Transition[] { new Transition(ref state1, '1', Movement.R),
new Transition(ref state1, '0', Movement.R),
new Transition(ref state2,'@', Movement.L)}, false);
state2 = new State(new char[] { '1', '0', '@' },
new Transition[] { new Transition(ref state2, '0', Movement.L),
new Transition(ref state3, '1', Movement.L),
new Transition(ref state3,'1', Movement.L)}, false);
在State
对象存储里面Tuple<>
是这样的:
public Transition(ref State state, char exchangeChar, Movement move)
{
transition = new Tuple<State, char, Movement>(state, exchangeChar, move);
}
即使我明确地将它传递为reference
,该State
对象仍然为空。这是为什么?
因为您在调用new Tuple<State, char, Movement>
.
您应该创建一个包装类,在其中包装 state 参数。这可以是一个通用类,使您的工作变得容易。您需要尽可能多地传递该包装器。
另一个不错的选择是使用Func<State>
,它会在每次调用时“计算”值。
另一种选择是使用Lazy
,它只会取一次值,这可能会在错误的时间触发,有时会出乎意料。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句