5

私はこれと同等の2つの方法を持っています(不自然な例を許してください):

public void WithResource(Action<Resource> action) {
    using (var resource = GetResource()) {
        action(resource);
    }
}

public void Test() {
    int id;
    SomeObject someObject;

    WithResource((resource) => {
        id = 1;
        someObject = SomeClass.SomeStaticMethod(resource);
    });

    Assert.IsNotNull(someObject);
    Assert.AreEqual(id, someObject.Id);
}

(私が取り除こうとしている WithResource 呼び出しには、さらにいくつかのロジックがあります。)

Use of unassigned local variableアサーションが割り当てられていない変数を使用しているため、コンパイル時にエラーが発生します。私は現在、それらに-1とnullそれぞれを割り当てることで問題を回避しています。

に初期化するのnullは悪くありませんが、そこに -1 を入れるのは避けたいです...コンパイラに「私を信じてください、これは初期化されます」と伝えたいです。これはテストなので、実際に爆撃されてもあまり気にしません。それは、テストを修正する必要があることを意味するだけだからです。

コンパイラにそのヒントを与える方法があるかどうか尋ねたくなりますが、それはさらに醜い気がします。そのようなヒントは存在しますか、それとも今行っているように変数を初期化する必要がありますか?

4

3 に答える 3

7

コンパイラは、割り当てが行われるかどうかを判断するのに十分なほどスマートではないため、エラーが発生します。

それについては何もできません。デフォルト値を割り当てる必要があります。おそらく0-1default(int)またはint.MinValue

于 2013-10-11T19:13:37.317 に答える
3

変数を初期化する必要があります。コンパイラは決してあなたを信用しません;)

于 2013-10-11T19:13:06.677 に答える