将隐式类型化的局部变量初始化为IList

时间:2011-04-20 11:36:23

标签: c# implicit-typing

我理解implicitly-typed local variables must be initialized

我知道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

}  

5 个答案:

答案 0 :(得分:3)

不,他们不可能 “var只能在同一语句中声明和初始化局部变量时使用;该变量不能初始化为null,也不能初始化为方法组或匿名函数。”

由于您没有初始化为界面,因此无法正常工作。

http://msdn.microsoft.com/en-us/library/bb384061.aspx

答案 1 :(得分:1)

如果您知道自己想要IList,为什么不将其声明为IList

对未初始化的变量使用var是(IMO)非常难以理解的。

答案 2 :(得分:1)

这样做:

var result = default(IList);

答案 3 :(得分:0)

您可以使用三元操作执行某些操作:

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

但实际上,阅读会非常痛苦。将您的代码发布后,我想我会坚持使用

IList result;

为了便于阅读。

答案 4 :(得分:0)

如果您在代码中使用System.Collections.Generic,那么唯一可用的选项是

var list =(x&lt; 0)? ......:......

如果您尝试在上述方案中使用IList,您将收到错误消息 无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.IList'。存在显式转换(您是否错过了演员?)

但是如果您使用的是System.Collections,则可以使用

IList结果;