使用 command.Parameters.AddWithValue() 时出现空引用异常

Null reference exception when using command.Parameters.AddWithValue()

我在主wpf中有这段代码window:

private void ButtonChangePermissions_Click(object sender, RoutedEventArgs e)
{
    if (ComboBoxSelectedProfile.SelectedIndex != -1)
    {
        ChangePermissionsWindow cpWindow = new ChangePermissionsWindow { parent = this };
        cpWindow.Show();
    }
    else
    {
        MessageBox.Show("Please choose a profile first.");
    }
}

这是子wpf window代码:

public partial class ChangePermissionsWindow : Window
{
        private readonly string dbConnectionString = Properties.Settings.Default.dbConnectionString;
        public postLoginWindow parent { get; set; }

        public ChangePermissionsWindow()
        {
            InitializeComponent();
            ComboBoxValuesToShow();
        }

        private void ComboBoxValuesToShow()
        {
            using (SqlConnection connection = new SqlConnection(dbConnectionString))
            {
                try
                {
                    connection.Open();

                    if (TableFunctions.doesTableExist("ProfilePermissions", dbConnectionString))
                    {
                        string selectQuery = "SELECT Permissions from ProfilePermissions where ProfileName = @ProfileName";

                        using (SqlCommand command = new SqlCommand(selectQuery, connection))
                        {
                            command.Parameters.AddWithValue("@ProfileName", parent.ComboBoxSelectedProfile.Text);//This line produces the Null reference error
                            ...Does not matter from here
                        }

出于某种原因,行:

command.Parameters.AddWithValue("@ProfileName", parent.ComboBoxSelectedProfile.Text)

导致 NullReferenceException.

这是异常文档:

System.NullReferenceException: Object reference not set to an instance of an object.
at WpfApplication1.Windows.ChangePermissionsWindow.ComboBoxValuesToShow() in c:\Users\Censored\Documents\Visual Studio 2013\Projects\WpfApplication1\WpfApplication1\Windows\WindowChangePermissions.xaml.cs:line 38}
System.Exception {System.NullReferenceException

非常感谢您的帮助!

非常high-level 使用对象初始化语法遵循这些步骤...

  1. 通过调用适当的构造函数
  2. 创建所需class的实例
  3. 调用所有列出的 属性 设置器
  4. Return新初始化的对象

ComboBoxValuesToShow 从构造函数调用,但基于列出的步骤 parent 属性 (在方法)直到构造函数 returns 之后才被设置,因为 属性 setter 直到实例创建之后才被调用。因此,在这种情况下,父级 属性 将始终为 null。

有几种方法可以解决这个问题...

  • 如果您想在构造函数中使用 parent 属性 然后将值传递给构造函数并在内部初始化 属性。

  • 使 ComboBoxValuesToShow 方法可从父级 window 访问,并将对 ComboBoxValuesToShow 的调用从构造函数移至父级 window 中的事件处理程序。