FMF*_*MFF 5 c# foreach var implicit-typing conditional-statements
在下面的简化代码中,
if(city == "New York City")
{
var MyObject = from x in MyEFTable
where x.CostOfLiving == "VERY HIGH"
select x.*;
}
else
{
var MyObject = from x in MyEFTable
where x.CostOfLiving == "MODERATE"
select x.*;
}
foreach (var item in MyObject)
{
Console.WriteLine("<item's details>");
}
Run Code Online (Sandbox Code Playgroud)
在条件块之外无法访问变量MyObject.我怎样才能在if..else之外迭代?
Eri*_*ert 24
让我们澄清一下令人困惑的问题.问题是你有两个局部变量,每个变量都有相同的"unspeakable"类型 - 一个匿名类型的序列.
我会改变你的具体代码:
string cost = city == "NYC" ? "HIGH" : "MODERATE";
var query = from row in table
where row.Cost == cost
select new { row.Population, row.Elevation };
Run Code Online (Sandbox Code Playgroud)
但是,如果由于某种原因仍然需要维护代码的结构,可以这样做:
static IEnumerable<T> SequenceByExample<T>(T t){ return null; }
...
var query = SequenceByExample(new { Population = 0, Elevation = 0.0 } );
if (whatever)
query = ...
else
query = ...
Run Code Online (Sandbox Code Playgroud)
这是一个名为"按示例执行"的技巧的变体,其中您将一个匿名类型的示例提供给泛型方法.然后,方法类型推断确定返回类型是什么,并将其用作隐式类型本地的类型.在运行时,它只会创建一个无用的对象,然后快速丢弃.