C# TargetInvocationException - (не должно быть там?)

Я пытаюсь сделать простое приложение в WPF, и я столкнулся с некоторой аномалией. У меня есть 2 класса: частичный класс (для окна WPF) и другой публичный класс, который я создал сам. Когда я пытаюсь получить доступ к классу, который я создал из оконного класса WPF, я сталкиваюсь с TargetInvocationException, говорящим мне, что ссылка на объект не установлена ​​на экземпляр объекта. Однако ссылка на объект, которая приводит к исключению, устанавливается для экземпляра объекта.

Вот мой код:

public partial class MainWindow : Window
{
    CurrentParent CP = new CurrentParent();
    public MainWindow()
    {
        InitializeComponent();
        CP.Par.Add("MainCanvas");
    }
}

public class CurrentParent
{
    private List<string> _Par;

    public List<string> Par
    {
        get { return _Par; }
        set { _Par = value; }
    }
}

Конечно, это в одном пространстве имен. Я не вижу никакой причины, почему я должен получать эту ошибку, так как моя ссылка на объект CP явно является экземпляром CurrentParent.

Кто-нибудь знает, как это исправить? Заранее спасибо!

-ian

2 ответа

Вы не создаете экземпляр члена _Par в классе CurrentParent. Это должно решить вашу проблему:

public class CurrentParent
{
 public CurrentParent()
 {
  this.Par = new List<String>();
 }

 public List<String> Par { get; set; }
}

Обратите внимание, что образец использует автоматические свойства. Вот более подробный пример, который лучше освещает вашу проблему:

public class CurrentParent
{
 public CurrentParent()
 {
  this._Par = new List<String>();
 }

 public List<String> Par
 {
  get { return this._Par; }
  set { this._Par = value; }
 }

 private List<String> _Par;
}

В CurrentParent поле _Par никогда не инициализируется и, следовательно, CP.Par нулевой. Исключение выдается, когда фреймворки пытаются вызвать Add, Вам нужно инициализировать _Par:

public class CurrentParent
{
    private List<string> _Par = new List<string>();

    public List<string> Par
    {
        get { return _Par; }
        set { _Par = value; }
    }
}
Другие вопросы по тегам