C# 为什么case语句不允许我设置将在方法中使用的变量
我正在尝试使用case语句为名为“query”的变量赋值。根据组合框的值,查询的值将发生变化。我在方法中分配了“query”变量,只想在方法中使用它。我得到一条错误消息,“query”变量是未赋值的,即使它是在方法的顶部赋值的。我有一个工作,但我不知道为什么会发生这种情况?任何洞察都会有帮助 这是密码C# 为什么case语句不允许我设置将在方法中使用的变量,c#,visual-studio-2010,case-statement,C#,Visual Studio 2010,Case Statement,我正在尝试使用case语句为名为“query”的变量赋值。根据组合框的值,查询的值将发生变化。我在方法中分配了“query”变量,只想在方法中使用它。我得到一条错误消息,“query”变量是未赋值的,即使它是在方法的顶部赋值的。我有一个工作,但我不知道为什么会发生这种情况?任何洞察都会有帮助 这是密码 public void ExportKml() { string query; switch (txtTable.SelectedIndex)
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();
}
public void ExportKml()
{
字符串查询;
开关(txtable.SelectedIndex)
{
案例0:
query=“从dbo.HyacinthWaterBodyZones中选择*”;
打破
案例1:
query=“从lchcd.privateWatersFinal中选择*,其中WaterodyPolyGon不为空”;
打破
案例2:
query=“从lchcd.publicWatersFinal中选择*,其中WaterModyPolyGon不为空”;
打破
}
cs.Open();
SqlCommand cmd=new SqlCommand(query,cs);如果所选索引不是0-2,则不会点击任何case语句。如果要在开关中分配变量,则需要包含默认值:
case
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;
}
您需要为查询
指定一个初始值。“
或字符串。为空
。您的开关中还应包含一个默认值
大小写。请参阅以下内容:
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();
}
string query=string.Empty;
开关(…)
{
....
}
如果(query.Length>0)
{
cs.Open();
SqlCommand cmd=new SqlCommand(query,cs);虽然您选择的索引在逻辑上可能永远不是0、1或2以外的任何内容,但编译器无法知道这一点。您需要使用伪值初始化变量,或者添加一个将其设置为伪值的case else
。可以使用string.IsNullOrWhiteSpace(query)
?@SamLeach我不确定,在这种情况下,它似乎毫无意义,因为我已经知道字符串不是空的,调用方法似乎更昂贵,而属性应该更快。然而,这些只是微观优化。default
案例不需要,他为什么要包括它?默认案例不需要,但它确实需要知道很有帮助。很容易修复,但它给了我一个headache@CodeSlinger,读@sam Leach,在我的例子中,默认值是不需要的,因为除非用户在组合框中选择一个项,否则该方法不会运行。因此,case station始终返回0到2之间的值。尽管如此,还是要提供帮助链接,谢谢!请确保编写一些测试来证明您的假设日期:)