我理解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
}
答案 0 :(得分:3)
不,他们不可能 “var只能在同一语句中声明和初始化局部变量时使用;该变量不能初始化为null,也不能初始化为方法组或匿名函数。”
由于您没有初始化为界面,因此无法正常工作。
答案 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结果;