2010-11-02 58 views
2

我在我的主要功能LINQ與未賦值的變量參數

string brand; 
double price; 
var itemList6 = from i in myStore.items 
    where i.price <= price && i.brand == brand 
    orderby i.type 
    select i; 

後來在節目中我問了一個品牌和價格的用戶頂部以下變量聲明,把它們放在相應的變量,然後運行該查詢。但是,編譯器不會讓我運行這個,因爲我在查詢中使用了未分配的變量。是通過初始化變量解決這個問題的唯一方法嗎?我通常會嘗試不初始化變量,如果我不需要一個初始值,因爲我覺得它很混亂(試圖瞭解以後/爲什麼我使用該默認值)。

回答

1

在構建LINQ查詢之前,您必須爲變量賦值。

原因是編譯器正在使用變量來構造查詢。即使查詢不會執行,編譯器也需要在使用之前分配變量,編譯器會將查詢表達式構建爲use。

我的建議只是把一些標稱的默認/臨時值在那裏。

+0

查詢在運行之前未完全構建。這是LINQ的延期執行。我甚至可以(並且我會)不斷地爲變量分配不同的值,並針對不同的結果再次運行查詢 – baruch 2010-11-02 21:46:16

+0

@baruch:你是對的。我並不知道這個部分的執行。這一點仍然存在,即使變量沒有被查詢構造「使用」,您在使用它之前也需要初始化一個變量。 – 2010-11-02 23:43:44

3

你可以寫一個函數,並通過這些變量作爲參數,以避免intialization ..

此外,在情況下,你最終會初始化考慮,以避免使用空??

+0

這樣做很難,但是會造成更多混亂,然後增加一些默認值,並且還會有調用函數和每次重新創建變量的開銷。 – baruch 2010-11-04 06:03:19

0

解決這個問題的另一種方法是在你明確賦予這些變量值之前不要創建查詢對象。