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

C# 将隐式类型的局部变量初始化为IList,c#,implicit-typing,C#,Implicit Typing,我知道隐式类型的局部变量必须初始化 我知道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

我知道隐式类型的局部变量必须初始化

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

}  
var结果//初始化为某事
if(x<0)
{  
结果=(来自context.someEntity中的s)
其中s.somecolumn=x
选择新的{c1=s.c1,c2=s.c2});
}
如果(x>=0)
{  
结果=(来自context.someEntity中的s)
其中s.someOtherColumn=x
选择新的{c1=s.c1,c2=s.c2});
}
foreach(结果中的变量y)
{  
//做点什么。更新1:检索y.c1,y.c2
}  

如果您知道希望它是一个
IList
,为什么不将其声明为
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

}  

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

如果您知道希望它是
IList
,为什么不将其声明为
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

}  
对未初始化的变量使用
var
(依我看)是非常不可读的。

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

因为您没有初始化到接口,所以它不会工作

不,不可能 只有在同一语句中声明并初始化局部变量时,才能使用var;该变量不能初始化为null、方法组或匿名函数

因为您没有初始化到接口,所以它不会工作

请执行以下操作:

var result = default(IList);
这样做:

var result = default(IList);

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

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

为了可读性。

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

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

为了可读性。

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

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

如果在上述场景中尝试使用IList,则会出现错误 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.IList”。存在显式转换(是否缺少强制转换?)

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


IList结果

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

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

如果在上述场景中尝试使用IList,则会出现错误 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.IList”。存在显式转换(是否缺少强制转换?)

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


IList结果

我通常同意你的观点,但我见过一些人使用它,这样,如果他们更改类型名称(例如从一个人更改为另一个人),他们就不必更改声明。虽然对于大多数无意义的重构工具,我通常同意你的观点,但我见过一些人使用它,这样,如果他们更改类型名称(例如从人到人),他们就不必更改声明。尽管对于大多数重构工具来说,这是毫无意义的