我正在開發一個庫,用於從SQL Server存儲過程檢索的數據中初始化普通舊數據對象。它的一個方法是以下各項之一:有什麼辦法讓C#不會抱怨實際上未初始化的未初始化變量?
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>
秒的陣列。雖然沒有靜態分析器可以編程方式證明它,但由於Execute
方法的編程方式,在數組之前沒有可以運行的委託。這意味着,在使用前委託
delegate(Row row) { details.Add(row.ToObject<U>()); } // use
必然委託
delegate(Row row) { details = headerBox.Value.Details; } // initialize
後運行,因此,變量details
一定會被初始化。
但是C#仍然抱怨:「使用未分配變量的細節'。」
有什麼辦法讓C#不會抱怨未初始化的變量實際上不是?
我開始認爲C#不適合我。
@Andrey:傳統的ORM專注於完整性,因此創建了大量元數據的大對象和類層次結構。相反,我的圖書館關注效率。例如,我的庫可以處理一次返回多個行集的存儲過程,這會在請求具有多個細節級別的實體時導致較少的服務器行程。 – pyon 2011-05-24 21:33:20
有不同的肥胖程度的ORMs。我非常肯定,有一個類似於你的。 – Andrey 2011-05-24 22:00:56
任何解決方法比只將其分配給null更簡單/更快/更簡單嗎? – cordialgerm 2011-05-25 02:08:56