C# - 将一个对象传递给构造函数,该构造函数此刻为null,但稍后将创建

时间:2017-07-21 14:47:10

标签: c# null

我想传递一个对象,此时此对象为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);
}

即使我将其显式传递为referenceState对象仍然为空。那是为什么?

1 个答案:

答案 0 :(得分:3)

因为你&#39; de-ref&#39;它在new Tuple<State, char, Movement>的调用中。

你应该创建一个包装状态参数的包装类。这可以是一个通用的类,使你的事情变得简单。你需要尽可能地传递那个包装器。

一个好的第二个选择是使用Func<State>,它将计算&#39;每次调用时的值。

另一种选择是使用Lazy,它只会获取一次值,这可能会在错误的时间触发,有时会意外触发。