C # TargetInvocationException - (не должно быть там?) - PullRequest
0 голосов
/ 25 августа 2011

Я пытаюсь сделать простое приложение в 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 ]

0 голосов
/ 25 августа 2011

Вы не создаете экземпляр члена _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;
}
0 голосов
/ 25 августа 2011

В 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; }
    }
}
...