Co mam to proste stwierdzenie przełącznikZmienna problem inicjalizacji w instrukcji switch
Control myControl;
switch(x)
{
case TabType.Edit:
{
myControl= ...;
}
case TabType.View:
{
myControl= ...;
}
}
myPageView.Controls.Add(myControl);
W tej sytuacji kompilator mówi mi, że
zmienna lokalna myControl nie może być zainicjowana przed uzyskaniem dostępu
Jaki jest najlepszy sposób na uniknięcie tej sytuacji?
Jedną opcją jest zainicjowanie myControl przed instrukcją przełącznika. Ale w tym przypadku wykonuję jeszcze jedną niepotrzebną inicjalizację.
Przypadek 1:
Control myControl = null;
switch(x)
{
case TabType.Edit:
{
myControl= ...;
}
case TabType.View:
{
myControl= ...;
}
}
myPageView.Controls.Add(myControl);
Następna opcja to zmienić drugą sprawę z default
. Po tym kompilator "zrozumie", że myControl i tak zostanie zainicjowany i nie wyrzuci wyjątku.
Przypadek 2:
Control myControl;
switch(x)
{
case TabType.Edit:
{
myControl= ...;
}
default:
{
myControl= ...;
}
}
myPageView.Controls.Add(myControl);
Ale ta sprawa nie wygląda tak dobrze, bo po dodaniu nowych właściwości do mojego wyliczenia to zrobi domyślne dla wszystkich innych typów (programista może łatwo zapomnieć, aby zmienić tutaj lub nie może być konieczne inicjowanie myControl dla innych typów wyliczeniowych).
Jakie jest najlepsze podejście w takich sytuacjach?
Kompilator daje odpowiedź .. Wystarczy ustawić go na null lokalny swój błąd „zmienna myControl nie może zostać zainicjowana przed uzyskaniem dostępu” – MethodMan