私が持っているのは単純なswitchステートメントです
Control myControl;
switch(x)
{
case TabType.Edit:
{
myControl= ...;
}
case TabType.View:
{
myControl= ...;
}
}
myPageView.Controls.Add(myControl);
この状況では、コンパイラは私にそれを教えてくれます
ローカル変数 myControl は、アクセスする前に初期化されていない可能性があります
では、この状況を回避する最善の方法は何ですか?
1 つのオプションは、switch ステートメントの前に myControl を初期化することです。しかし、この場合、不要な初期化をもう 1 つ行います。
ケース 1:
Control myControl = null;
switch(x)
{
case TabType.Edit:
{
myControl= ...;
}
case TabType.View:
{
myControl= ...;
}
}
myPageView.Controls.Add(myControl);
次のオプションは、2 番目のケースを で変更することdefault
です。その後、コンパイラは myControl がとにかく初期化され、例外をスローしないことを「理解」します。
ケース 2:
Control myControl;
switch(x)
{
case TabType.Edit:
{
myControl= ...;
}
default:
{
myControl= ...;
}
}
myPageView.Controls.Add(myControl);
しかし、このケースはあまり良くありません。列挙型にいくつかの新しいプロパティを追加した後、他のすべての型のデフォルトを実行するためです (開発者はここでコードを変更することを簡単に忘れたり、他の列挙型の myControl を初期化する必要がない可能性があります)。 .
そのような状況での最善のアプローチは何ですか?