Dlaczego zawsze muszę przypisać wartość do zmiennej łańcuchowej, zanim faktycznie użyję jej do porównania. Dla ex: Niektóre wejścia - objDlaczego należy przypisać wartość do napisu przed porównaniem, gdy domyślnie jest null
string temp;
if (obj== null)
{
temp = "OK";
}
string final = temp;
otrzymuję błąd czasu kompilacji - coś takiego - nie mogę użyć obsadzony zmiennej 'temp'. Ale zmienna łańcuchowa ma domyślną wartość "null", której chcę użyć. Dlaczego nie jest to dozwolone?
Przy okazji, krótka notatka techniczna. Ponieważ C# kompiluje się do IL, a IL poziomu na poziomie jest oparty na stosie, zmienne technicznie nie istnieją, chyba że zostały przypisane. Podczas gdy debugger może ci powiedzieć, że nieprzypisana zmienna równa się "0" lub coś podobnego, w większości przypadków jest to po prostu uprzejmość. Zostanie on utworzony później. – GregRos
@GregRoss - a kiedy jest tworzony, wierzę, że jest to "default (T)", "null" w tym przypadku. Ale nie można tego zaobserwować dla programisty C#. –
Niezupełnie. W IL zmienna nie może być zadeklarowana bez posiadania jawnej wartości, do której można ją przypisać. Aby przypisać zmienną do 'default (T)' (lub 'null'), musisz najpierw pobrać tę wartość za pomocą jawnego polecenia, a dopiero potem przydzielić ją. W praktyce, IL generowane z C# nigdy tego nie robi. Chociaż możesz myśleć, że zadeklarowałeś zmienną, IL zwykle nie deklaruje jej dopóki nie ma określonej wartości do przypisania. – GregRos