Inner Exception w MainWindow.xaml.cs - dodawanie obiektu listy w obiekcie

0

Cześć,

próbuję utworzyć obiekt wewnątrz MainWindow.xaml.cs, jednak otrzymuję Inner Exception. Jak się można go pozbyć? Szukałem rozwiązań i znalazłem na przykład to (http://stackoverflow.com/questions/2658908/why-is-targetinvocationexception-treated-as-uncaught-by-the-ide), jednak wyłączenie Tools -> Options -> Debugging -> General -> Enable Just My Code nie pomogło.

Kod jest taki:

namespace MT4Analyzer
{
	/// <summary>
	/// Interaction logic for MainWindow.xaml
	/// </summary>
	public partial class MainWindow : Window
	{
		struct MojaStruktura
		{
			public string parameterName;
			//public Single minValue;
			//public Single stepValue;
			//public Single maxValue;
		};

		class MojaKlasa // temporary, only for testing
		{
			public string Tekst { get; set; }
			public List<MojaStruktura> MojeStruktury { get; set; }
			public MojaKlasa()
			{
			}
		}

		public MainWindow()
		{
			InitializeComponent();

			MojaKlasa myMojaKlasa = new MojaKlasa(); // temporary
			myMojaKlasa.Tekst = "a";
			MojaStruktura mojaStruktura = new MojaStruktura();
			mojaStruktura.parameterName = "nazwa";
			myMojaKlasa.MojeStruktury.Add(mojaStruktura);
		}
	}
}

Szczegóły w załącznikach.

Pozdrawiam!

PS Czy jeśli w klasie mam tylko akcesory i konstruktory, to nie chcąc zmieniać klasy na publiczną muszę przed każdym akcesorem i konstruktorem użyć słowa 'public'? W C++ jest coś takiego: "public:".

1
                public MainWindow()
                {
                        InitializeComponent();
 
                        MojaKlasa myMojaKlasa = new MojaKlasa(); // temporary
                        myMojaKlasa.Tekst = "a";
                        MojaStruktura mojaStruktura = new MojaStruktura();
                        mojaStruktura.parameterName = "nazwa";
                        myMojaKlasa.MojeStruktury.Add(mojaStruktura);                      // <---------- tu jest problem
                }
 

Ponieważ nigdzie wcześniej nie tworzysz tej listy, a w zaznaczonej linijce dodajesz coś do niej. Stąd "NullReferenceException". Zresztą w przytoczonych wyjątkach jest to właśnie napisane.

PS Czy jeśli w klasie mam tylko akcesory i konstruktory, to nie chcąc zmieniać klasy na publiczną muszę przed każdym akcesorem i konstruktorem użyć słowa 'public'? W C++ jest coś takiego: "public:".

Niestety lub stety, tutaj musisz zawsze pisać zakres: public, protected, private, internal. Dla pól, metod i klas wewnętrznych klasy, domyślnym jest private (więc jak go nie podasz, to wtedy będzie właśnie private). Wyjątek to klasa (struktura, cokolwiek) najbardziej zewnętrzna, wtedy domyślnym jest internal i trzeba podać z palca public (zresztą wtedy tylko są takie dwie możliwości).

1 użytkowników online, w tym zalogowanych: 0, gości: 1