Odwołanie do obiektu który nie istnieje

0

Witam! Mam dziwną sytuację mam klasę:

public static class Test1
    {
       public static Test2 aa { get; set; }
    }

oraz

public class Test2
{
      public string NameControl { get; set; }
}

w programie wywoluje:

string a = Test1.aa.NameControl;

I u mnie tak jak by kompilator pomijał ten fragment bo "idze dalej", a u kolegi z pracy wywala blad no bo chce się odniesc do czegoś co nie istenieje

U mnie nawet jak ustawie breakpoint przy tym fragmencie to aplikacja nie zatrzymuje się podejrzewam ze jakieś opcje mam włączone ale gdzie??

0

tak na chłopski rozum,
string a = Test1.aa.NameControl;
powinno robić to samo co
string a = null;

0

Ponieważ nigdzie nie zmieniasz wartości tego 'Tekst.aa', to zostało tam przypisane niejawnie null (właściwość aa jest statyczna, ale na początku przechowuje domyślną wartość, czyli tutaj będzie null). I jeśli nigdzie później nie używasz zmiennej 'a', to Twój kompilator prawdopodobnie optymalizując kod, usuwa tą linijkę i dlatego kolejne wywołanie po kropce, czyli 'NameControl' u Ciebie nie rzuca wyjątku, bo po prostu nie zostaje wykonane. Być może u Twojego kolegi inaczej kompilacja wygląda, albo wręcz dalej używa tego 'a' i stąd taki wyjątek, bo próbujesz wywołać NameControl, na rzecz null, a to jest niemożliwe.

Nie mówię, że to jest na 100% ten powód, ale wydaje mi się, że jest wysoce prawdopodobny.

0

Wasze odpowiedzi nie wyjaśniają tego:

U mnie nawet jak ustawie breakpoint przy tym fragmencie to aplikacja nie zatrzymuje się podejrzewam ze jakieś opcje mam włączone ale gdzie??

A może kliknąłeś, żeby używał last successfull build?

Chodzi mi o tą opcję:
http://stackoverflow.com/questions/596142/would-you-like-to-continue-and-run-the-last-successful-build

0

Moze przedstawie inny przyklad "laika", mam taki kod w funkcji Form_Load

int a = 0;
int i = 1/a;

kompilator mi nie wywali blad po prostu pominie ten fragment i wszystko ponizej co jest w funkcji Load, tak jak wczesniej pisalem breakpoint tez nie zatrzyma w tym miejsc. Zatanawiam się czy jest jaka opcja w VS2012 która moze przez przypadek wlaczylem?

Nic nie ustawialem, jutro sprawdze te ustawina ale z tym dzieleniem przez zero to stworzone bylo w calkiem nowym projekcji dodam jeszcze ze jak umieszcze dzielenie w klauzuli try catch to w tedy pojawi się komunika tzn wejdzie w catch, dziwna sprawa bo nigdy nie grzebalem w zadnych ustawianach vs, swiezo zainstalowany system.

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