有没有办法让C#不抱怨实际上没有初始化的未初始化变量?

时间:2011-05-24 21:26:14

标签: c# closures

我正在开发一个库,它从SQL Server存储过程中检索的数据初始化普通旧数据对象。其中一种方法如下:

public static T RetrieveCompound<T, U>(string cmdText, params Parameter[] parameters)
    where T : Header<U>, new()
    where U : class, new() {

    Box<T> headerBox = new Box<T>();
    List<U> details;
    Execute(cmdText, parameters, new Action<Row>[] {
        SetReferenceAction<T>(headerBox) +
        delegate(Row row) { details = headerBox.Value.Details; },
        delegate(Row row) { details.Add(row.ToObject<U>()); }
    });
    return headerBox.Value;
}

Execute的第三个参数是Action<Row> s的数组。虽然没有静态分析器可以通过编程方式证明它,但由于Execute方法的编程方式,没有代理可以在数组之前的代理之前运行。这意味着代表

delegate(Row row) { details.Add(row.ToObject<U>()); } // use

必须在代表

之后运行
delegate(Row row) { details = headerBox.Value.Details; } // initialize

因此,变量details必须在使用之前进行初始化。

但是C#仍然抱怨:“使用未分配的变量'详细信息'。”

有没有办法让C#不抱怨实际上没有的未初始化变量?


我开始认为C#不适合我。

2 个答案:

答案 0 :(得分:7)

这是通常的解决方法:

List<U> details = null;

答案 1 :(得分:3)

将其初始化为空值是实现它的一种方式:

List<U> details = null;

然后,您可以在需要使用时为其分配正确的数据。