C#错误:使用“switch”时未分配的局部变量错误?

时间:2012-07-04 19:53:32

标签: c# visual-studio compiler-errors

我想要实现的是,显示以/开头的行数(用户通过comboBox1选择类型)给定字符(通过textbox1)。

尝试编译此代码:

string needle=textBox1.Text.Trim(), cboxSelection = comboBox1.Text;
int count;
switch (cboxSelection)
{
    case "Starting with":
        count = File.ReadLines(openFileDialog1.FileName).Count(line => Regex.IsMatch(line, "^" + needle + ".*$"));
        break;
    case "Ending with":
        count = File.ReadLines(openFileDialog1.FileName).Count(line => Regex.IsMatch(line, "^.*" + needle + ".*$"));                    
        break;
}
string strCount = count.ToString(); // error line
label6.Text = "There are " + strCount + " lines " + cboxSelection + " " + needle + " character.";

收到错误消息:Use of unassigned local variable 'count'。我错过了什么?

5 个答案:

答案 0 :(得分:4)

您的本地count变量尚未在使用点明确分配。要么声明为

int count = 0;

或在案例陈述中添加default子句:

default: count = 0;

您的switch语句无法保证输入任何一种情况,因此count可以保持未分配状态。如果需要这两种情况之一,则应在default情况下抛出异常:

default: throw new ArgumentException("Invalid selection");

您应始终在switch语句中使用default大小写来指定默认值或防范意外状态。

答案 1 :(得分:1)

you can try with int count = 0;

and add ; not , between two instructions

string needle=textBox1.Text.Trim(); 
cboxSelection = comboBox1.Text;

答案 2 :(得分:1)

并未在所有代码路径上分配

Count。如果您的开关没有“正在开始”或“结束时”,那么它将是null

您可以初始化它:

int count = 0;

答案 3 :(得分:1)

这是因为您没有涵盖交换机中的所有可能性...因此,您的代码中有一条“路径”,您将label6.Text从未分配count

您应该为count分配初始值或在交换机中添加default

答案 4 :(得分:1)

您的switch语句并未涵盖所有情况(实际上它不能,cboxSelection是一个字符串),因此在您使用它之前,count可能没有分配任何内容。

向交换机添加默认大小写以修复它。