【问题标题】:C# Error: Unassigned local variable error when using "switch"?C# 错误:使用“switch”时出现未分配的局部变量错误?
【发布时间】:2012-07-04 19:53:31
【问题描述】:

我想要实现的是,显示以给定字符(通过 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'。我错过了什么?

【问题讨论】:

  • 再次阅读错误信息。什么时候会是真的?
  • Use of unassigned local variable 的可能重复项(用于“if”,但与此处的想法完全相同。-1 是因为有太多太接近的匹配项。)

标签: c# visual-studio compiler-errors


【解决方案1】:

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

int count = 0;

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

default: count = 0;

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

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

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

【讨论】:

  • 问题是,现在我得到的结果只有 0。你觉得count = File.ReadLines(openFileDialog1.FileName).Count(line => Regex.IsMatch(line, "^.*" + needle + ".*$")); 行有什么问题吗?
  • @epic_syntax - 问题是您的 cboxSelection 变量不能保证与您拥有的任何一种情况相匹配,因此count 不一定会在 case 块中分配。
【解决方案2】:

Count 并未分配给所有代码路径。如果您的交换机没有“开始于”或“结束于”,则为null

你可以初始化它:

int count = 0;

【讨论】:

  • 是的,我做到了,问题是,现在我得到的结果只有 0。你怎么认为 count = File.ReadLines(openFileDialog1.FileName).Count(line => Regex.IsMatch(line, "^.*" + needle + ".*$"));行吗?
【解决方案3】:
you can try with int count = 0;

and add ; not , between two instructions

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

【讨论】:

  • 是的,我试过了,问题是,现在我得到的结果只有 0。你怎么认为 count = File.ReadLines(openFileDialog1.FileName).Count(line => Regex.IsMatch(line, "^.*" + needle + ".*$"));行吗?
  • 你也可以使用可空类型,试试int?计数=空;
【解决方案4】:

这是因为您没有涵盖开关中的所有可能性...所以在您的代码中有一条“路径”,您可以在其中到达 label6.Text,从不分配 count

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

【讨论】:

  • Fixed 问题是,现在我得到的结果只有 0。你认为 count = File.ReadLines(openFileDialog1.FileName).Count(line => Regex.IsMatch 有什么问题吗? (行,“^.*”+针+“.*$”));行吗?
【解决方案5】:

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

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

【讨论】:

  • 已修复,问题是,现在我得到的结果只有 0。您认为 count = File.ReadLines(openFileDialog1.FileName).Count(line => Regex. IsMatch(line, "^.*" + needle + ".*$"));行吗?
  • 您是否尝试过检查您的正则表达式(例如chris.photobooks.com/regex/default.htm)?
猜你喜欢
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
相关资源
最近更新 更多