这些方法中哪一种更好或者它们相同?

Which one of these approaches is better or are they the same?

我想知道这两种FiniteStateMachine.AddState()方法中哪一种比另一种更好,例如,一种需要unboxing/boxing吗?或者两者都需要 unboxing/boxing?如果其中任何一个比另一个更好,哪个更好?

public interface IState
{
    string Name { get; set; }
}

public sealed class FiniteStateMachine
{
    private Dictionary<string, IState> allStates = new Dictionary<string, IState>();

    public void AddState<TState>(TState newState) where TState : IState
    {
        allStates.Add(newState.Name, newState);
    }

    public void AddState(IState newState)
    {
        allStates.Add(newState.Name, newState);
    }
}

public class EnemySoldierSword_TakingHitState : IState
{
    public string Name { get; set; }

    public EnemySoldierSword_TakingHitState(string name)
    {
        Name = name;
    }
}

    public class Program
{
    public var FSM = new FiniteStateMachine();
    FSM.AddState(new EnemySoldierSword_ChasingState("ChasingState"));
}

由于 IState 是引用类型,您无法避免装箱,因此唯一的区别是装箱发生的位置。如果 TState 是一个值类型,它会在调用 allStates.Add 时发生,否则它会在调用 AddState 方法时发生。