避免使用"未分配的局部变量"错误

4 c# closures action

我有两种方法相当于此(原谅人为的例子):

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);
}
Run Code Online (Sandbox Code Playgroud)

(WithResource调用中还有一些逻辑,我试图将其分解出去.)

我得到Use of unassigned local variable编译时错误,因为断言是......使用未分配的变量.我现在通过null分别分配它们来避免这个问题.

初始化null并没有感觉不好,但我想避免把-1放在那里...我真的想告诉编译器"相信我,这将被初始化".因为它是一个测试,如果它是炸弹,我实际上并不太在乎,因为这只意味着我将不得不修复测试.

我很想问是否有办法给编译器提供这个提示,但感觉更加丑陋.是否存在这样的提示或者我应该像我现在正在做的那样初始化变量?

Hab*_*bib 6

编译器不够聪明,无法确定是否会进行分配,从而确定错误.

你不能做任何事情,你必须给它分配一些默认值,大概0,-1,default(int)或者int.MinValue