为什么 case 语句不允许我设置将在方法中使用的变量

本文关键字:方法 变量 语句 case 不允许 允许我 设置 为什么 | 更新日期: 2023-09-27 18:31:55

我试图使用 case 语句为名为 "query" 的变量赋值。根据组合框的值,查询的值将发生变化。我在方法中分配了"query"变量,并且只想在方法中使用它。我收到一条错误消息,指出"query"变量未赋值,即使它是在方法顶部分配的。我有一个解决方法,但我不知道为什么会这样?任何见解都会有所帮助。

这是代码。

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)给出一个错误,指出它是未赋值的局部变量。

为什么 case 语句不允许我设置将在方法中使用的变量

您需要

query分配一个初始值。要么"",要么string.Empty.您还应该在交换机中包含default案例。见下文:

public void ExportKml()
{
    string query = string.Empty;
    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;
        default:
            query = "";
            break;
    }
    // Add a check for empty string before trying the query.
    if(!string.IsNullOrWhiteSpace(query))
    {
        cs.Open();
        SqlCommand cmd = new SqlCommand(query, cs);
        SqlDataReader polygon = cmd.ExecuteReader();
    }
}

因为编译器无法知道你的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 语句

中添加默认大小写也可以,但就个人而言,我更喜欢在输入 switch 语句之前初始化查询变量。对我来说更清楚,更不容易忘记其他一些重要的初始化

如果所选索引不是 0-2,则不会命中任何 case 语句。如果要在switch中分配变量,则需要包含default:情况。

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;
    default:
        //assign query = something here
        break;
}