代码之家  ›  专栏  ›  技术社区  ›  Christian Ivicevic

有没有可能创建一个Foo<T>对象的集合,其中T被限制为不可为null的类型?

  •  4
  • Christian Ivicevic  · 技术社区  · 8 年前

    private struct StateGroup<TState> where TState : struct, IAgentState
    {
        // ...
        // ComponentDataArray requires TState to be a struct as well!
        public ComponentDataArray<TState> AgentStates;
        // ...
    }
    

    以及多个这种类型的对象

    [Inject] private StateGroup<Foo> _fooGroup;
    [Inject] private StateGroup<Bar> _barGroup;
    [Inject] private StateGroup<Baz> _bazGroup;
    // ...
    

    Inject

    在类中,我需要为每个类调用相同的代码块 StateGroup 对象,我想将所有对象添加到一个集合中并对其进行迭代。但是,我不能定义任何类型的集合 StateGroup<IAgentState>[] 因为它需要一个不可为null的类型参数 自从 ComponentDataArray 属于 国家集团 也需要一个结构!

    除了编写一个方法之外,我还为每个方法手动调用了十几次 对象,是否有合理的方法将它们添加到集合中,并为每个元素调用特定的方法?

    1 回复  |  直到 8 年前
        1
  •  0
  •   taquion    8 年前

    您可以为创建另一个接口 StateGroup<TState> 没有 struct

    private interface IStateGroup<TState> where TState : IAgentState { }
    

    private struct StateGroup<TState>: IStateGroup<IAgentState> where TState: struct, IAgentState { }
    

    测试和测试:

    var states = new List<IStateGroup<IAgentState>>();
    var fooGroup = new StateGroup<Foo>();
    var booGroup = new StateGroup<Boo>();
    var mooGroup = new StateGroup<Moo>();
    states.Add(fooGroup);
    states.Add(booGroup);
    states.Add(mooGroup);