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;

または、case ステートメントに句を追加defaultします。

default: count = 0;

ステートメントswitchがいずれかのケースに入ることは保証されていないため、count未割り当てのままにすることができます。2 つのケースのいずれかが必要な場合は、defaultケースで例外をスローする必要があります。

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

defaultデフォルトを割り当てるため、または予期しない状態から保護するために、switch ステートメントでは常にケースを使用する必要があります。

于 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 に答える