1

我明白了implicitly-typed local variables must be initialized

我知道那result将是一个IList,所以我能以某种方式说 varresult将是一个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

}  
4

5 回答 5

3

不,它们不能是“只有在同一语句中声明和初始化局部变量时才能使用 var;不能将变量初始化为 null、方法组或匿名函数。”

由于您没有初始化接口,因此它将不起作用。

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

于 2011-04-20T11:42:21.950 回答
1

如果你知道你想要它是一个IList,为什么不把它声明为一个IList呢?

用于var未初始化的变量(IMO)非常不可读。

于 2011-04-20T11:41:37.427 回答
1

做这个:

var result = default(IList);
于 2011-04-20T11:42:56.603 回答
0

你也许可以用三元运算做一些事情:

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

但实际上,读起来会很痛苦。使用您发布的代码,我想我会坚持

IList result;

为了可读性。

于 2011-04-20T11:47:20.413 回答
0

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

变量列表 = (x < 0) ?... : ...

如果您尝试在上述场景中使用 IList,您将收到错误无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.IList”。存在显式转换(您是否缺少演员表?)

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

IList 结果;

于 2013-11-14T14:56:19.307 回答