为什么 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)给出一个错误,指出它是未赋值的局部变量。
您需要
为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;
}