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

有没有办法让C#不抱怨实际上没有初始化的未初始化变量?,c#,closures,C#,Closures,我正在开发一个库,用于从SQLServer存储过程检索的数据初始化普通的旧数据对象。其方法之一是以下方法: 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&

我正在开发一个库,用于从SQLServer存储过程检索的数据初始化普通的旧数据对象。其方法之一是以下方法:

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;
}
必须在委托之后运行

delegate(Row row) { details.Add(row.ToObject<U>()); } // use
delegate(Row row) { details = headerBox.Value.Details; } // initialize
因此,变量
details
必须在使用前进行初始化

但C#仍然抱怨:“使用未赋值变量‘details’。”

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



我开始觉得C#不适合我。

这是通常的解决方法:

List<U> details = null;
List details=null;

将其初始化为空值是一种方法:

List<U> details = null;
List details=null;

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

@Andrey:传统的ORM注重完整性,因此,会创建大量元数据溢出的大型对象和类层次结构。相反,我的图书馆注重效率。例如,我的库可以处理一次返回多个行集的存储过程,这会在请求具有多个详细级别的实体时减少服务器跳闸。有非常不同的ORM具有不同的详细级别。我很确定有一个类似于您的解决方案。是否有任何解决方案比仅将其分配给null更容易/更快/更简单?