2

ケースステートメントを使用して、「クエリ」という名前の変数に値を割り当てようとしています。コンボボックスの値によってクエリの値が変わります。メソッド内で「クエリ」変数を割り当てましたが、メソッド内でのみ使用したいと考えています。メソッドの先頭で割り当てられているにもかかわらず、「クエリ」変数が割り当てられていないというエラー メッセージが表示されます。回避策がありますが、なぜこれが起こるのかわかりませんか? どんな洞察も役に立ちます。

コードはこちらです。

public void ExportKml()
    {
        string query;

            switch (txtTable.SelectedIndex)
            {
                case 0:
                    query = "Select * from dbo.HyacinthWaterBodyZones";
                    break;
                case 1:
                    query="Select * from lchcd.privateWatersFinal where waterbodypolygon is not null";
                    break;
                case 2:
                    query = "Select * from lchcd.publicWatersFinal where waterbodypolygon is not null";
                    break;

            }

            cs.Open();
            SqlCommand cmd = new SqlCommand(query, cs);   <<--Error Message 
            SqlDataReader polygon = cmd.ExecuteReader();
}

行内の「クエリ」変数: SqlCommand cmd = new SqlComman(query,cs) は、割り当てられていないローカル変数であることを示すエラーを返します。

4

3 に答える 3

3

コンパイラは、SelectedIndex常に 0、1、または 2 になるかどうかを知る方法がないため、スイッチの前に定義された変数を初期化することを強く提案しますが、スイッチの後に使用されます。

string query = string.Empty;
switch(.....)
{
    ....
}
if(query.Length > 0)
{
    cs.Open();
    SqlCommand cmd = new SqlCommand(query, cs);   <<--Error Message 
    SqlDataReader polygon = cmd.ExecuteReader();    
}

switch ステートメントに default ケースを追加することもできますが、個人的には、switch ステートメントに入る前にクエリ変数を初期化することを好みます。私にとってはより明確であり、他の重要な初期化を忘れる可能性が低くなります

于 2013-09-19T15:46:20.300 に答える