2011-04-20 175 views
1

我明白implicitly-typed local variables must be initialized初始化隱式鍵入的局部變量爲IList

我知道result將是一個IList所以我可以不知何故說var result將是一個IList

var result; //initialize to something 

if(x < 0) 
{ 
    result = (from s in context.someEntity 
       where s.somecolumn = x 
       select new { c1 = s.c1,c2=s.c2}).ToList(); 
} 

if(x >= 0) 
{ 
    result = (from s in context.someEntity 
       where s.someOtherColumn = x 
       select new { c1 = s.c1,c2=s.c2}).ToList(); 
} 

foreach(var y in result) 
{ 
    //do something . UPDATE 1: Retrieve y.c1, y.c2 

} 

回答

1

如果你知道你希望它是一個IList,爲什麼不乾脆宣佈它作爲一個IList

對未初始化的變量使用var是(IMO)相當不可讀的。

+0

我通常同意你的看法,但我見過一些人使用它,所以如果他們改變了類型名稱(例如從人類到人物),他們不必更改聲明。儘管大多數重構工具毫無意義 – taylonr 2011-04-20 11:43:16

1

這樣做:

var result = default(IList); 
0

你也許能夠做一些與三元操作:

var list = (x < 0) ? ... : ... 

但說真的,那將是非常痛苦的閱讀。與您的代碼張貼我認爲我只是堅持與

IList result; 

爲了可讀性。

0

如果您使用System.Collections.Generic在你的代碼唯一可用的選項是

VAR名單=(X < 0)? ...:...

如果您嘗試在上述場景中使用IList,您將收到錯誤 無法將類型'System.Collections.Generic.IEnumerable'隱式轉換爲'System.Collections.IList'。一個顯式轉換存在(是否缺少強制轉換?)

但是,如果你System.Collections中使用,你可以使用

IList的結果;