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