3

次のコードは、VS2010でコンパイル時エラーを発生させます。

Use of unassigned local variable 'error'

leveldb_memory error;

try
{
    return leveldb_open(options, name, out error); // <== Notice `out error`
}
finally
{
    Validate(error); // <== Use of unassigned local variable 'error'
}

正しくないようですが、コードを変更せずにこのエラーを克服する方法はありますか?


編集

まあ、それはC#のバグではありません... :(

4

6 に答える 6

12

error初期値はありません。leveldb_openまた、設定する前に例外をスローした場合でも、例外は発生しません。

したがってerror、値を設定せずに使用すると、エラーが発生する可能性があります。

がnull許容型の場合leveldb_memory、次のように初期化できますnull

leveldb_memory error = null;
于 2012-07-29T14:25:09.820 に答える
9

いいえ、設定されないleveldb_open原因となる例外をスローする可能性がありerrorます。

于 2012-07-29T14:25:09.250 に答える
1

コードでは、変数Errorに値が割り当てられることはありません。この質問に他にどのように答えるかわかりませんか?それは確かにac#バグではありません。

于 2012-07-29T14:24:41.933 に答える
1
leveldb_memory error = default( levelldb_memory );
try {
    return leveldb_open( options, name, out error );
} finally {
    Validate( error );
}

defaultコンストラクターを実行せずに型からオブジェクトを作成します。ブロック内で何かを実行してtryも、その後は何の影響もありません。コードが例外をキャッチし、エラーを割り当てないためです。

ところで、それValidateは空のオブジェクトを呼び出すことができます。しかし、そのdefault部分はエラーを隠すことです。

于 2012-07-29T14:29:59.773 に答える
0

errorメソッドに渡す前に、変数を初期化する必要があります。

そうすればerror = null、コンパイラは満足するでしょう。

于 2012-07-29T15:20:22.607 に答える
-1

これはC#エラーではありません(-:関数が誰にも割り当てられないようにするために
使用しますが、内部に割り当てがあることを約束します。したがって、自分で確認する必要があります...out errorerror

于 2012-07-29T14:27:56.963 に答える