4

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

尝试编译此代码:

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'。我错过了什么?

4

5 回答 5

6

您的局部count变量在使用时尚未明确分配。要么将其声明为

int count = 0;

或在您的案例陈述中添加一个default子句:

default: count = 0;

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

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

您应该始终default在 switch 语句中使用 case 来分配默认值或防止出现意外状态。

于 2012-07-04T19:54:47.567 回答
1
you can try with int count = 0;

and add ; not , between two instructions

string needle=textBox1.Text.Trim(); 
cboxSelection = comboBox1.Text;
于 2012-07-04T19:55:08.830 回答
1

Count未在所有代码路径上分配。如果您的交换机没有“开始于”或“结束于”,它将是null.

你可以初始化它:

int count = 0;

于 2012-07-04T19:55:08.593 回答
1

这是因为你没有覆盖你的开关中的所有可能性......所以你的代码中有一个“路径”,你label6.Text永远不会分配count.

您应该 为您的开关分配一个初始值count或添加一个default

于 2012-07-04T19:56:13.217 回答
1

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

向开关添加默认情况以修复它。

于 2012-07-04T19:56:29.970 回答