无法将项目添加到用户控件基类的构造函数中的列表 class

Cannot add an item to a List in a constructor of a user control's base class

当我尝试向 CustomCheckoutProcess class 的构造函数中的列表添加项目时,我似乎遇到了空引用错误。此 class 由用户控件的 class 继承,因此在调用控件的构造函数时调用其默认构造函数(我相信这就是它的工作原理)。

这里是 class 结帐流程定义的相关部分(错误似乎在第 12 行 - 在第 11 行标有注释):

public class CustomShoppingCart : ShoppingCart {

    private List<CheckoutProcessArgument> checkoutProcessArguments = List<CheckoutProcessArgument>();

    public CustomShoppingCart()
    {
        GetBaseCartSteps();

        CheckoutProcessArgument stepTwoArg = new CheckoutProcessArgument("Step2", new Guid("12345678-1234-1234-1234-123456789012"));

        // when I comment this line out, everything works fine
        checkoutProcessArguments.Add(stepTwoArg);

        BuildCheckoutProcess();
    }

    private void GetBaseCartSteps()
    {
        baseCartSteps = new Dictionary<string, int>();

        // iterate through base cart's steps and grab name/index pairs
        foreach (CheckoutProcessStepInfo step in this.CheckoutProcessSteps)
        {
            baseCartSteps.Add(step.Name, step.StepIndex);
        }
    }

    private bool CartContains(Guid productGuid)
    {
        for (int i = 0; i < ShoppingCartInfoObj.CartItems.Count; i++)
        {
            if (ShoppingCartInfoObj.CartItems[i].SKU.SKUGUID == productGuid)
            {
                return true;
            }
        }

        return false;
    }

    private void BuildCheckoutProcess()
    {
        // create a list of ints to dynamically add or remove the indexes of the base cart's steps
        List<int> steps = new List<int>();


        if (checkoutProcessArguments != null)
        {
            // add steps if they are specified in the arguments list
            foreach (CheckoutProcessArgument argument in checkoutProcessArguments)
            {
                if (CartContains(argument.ProductGUID))
                {
                    int stepIndexToAdd;

                    baseCartSteps.TryGetValue(argument.StepName, out stepIndexToAdd);
                    steps.Add(stepIndexToAdd);
                }
            }
        }

        // sort the steps so that they'll be in the correct order
        steps.Sort();

        customSteps = new int[steps.Count];

        customSteps = steps.ToArray();
    }
}

这是我用来为自定义结帐流程创建参数的结构:

public struct CheckoutProcessArgument
{
    private string stepName;
    private Guid productGUID;

    public string StepName { get { return stepName; } }

    public Guid ProductGUID { get { return productGUID; } }

    public CheckoutProcessArgument(string stepName, Guid productGuid)
    {
        this.stepName = stepName;
        this.productGUID = productGuid;
    }

}

这是我收到的错误的堆栈跟踪:

Message: Object reference not set to an instance of an object. 
Stack Trace: 
at CustomShoppingCart..ctor()
...

问题是,我似乎看不出什么可能为空。有任何想法吗?我猜问题不在于我在构造函数中向 List 添加了一些东西,而是我在某处搞砸了其他东西,但对于我的一生我无法弄清楚是什么。

尝试访问列表之前立即在构造函数中实例化列表。另外,如果不想再次分配列表,您可以使用 readonly 关键字。进一步注意,我们可以实例化列表并在一行代码中添加 stepTwoArg

private readonly List<CheckoutProcessArgument> checkoutProcessArguments;

public CustomShoppingCart()
{
    GetBaseCartSteps();

    CheckoutProcessArgument stepTwoArg = new CheckoutProcessArgument("Step2", new Guid("12345678-1234-1234-1234-123456789012"));

    checkoutProcessArguments = new List<CheckoutProcessArgument> { stepTwoArg };

    BuildCheckoutProcess();
}