在下面的简化代码中,
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>");
}
变量 MyObject 在条件块之外不可访问。如何在 if..else 之外进行迭代?
让我们澄清一下您令人困惑的问题。问题是你有两个局部变量,每个变量都有相同的“不可描述”类型——匿名类型序列。
我会像这样更改您的具体代码:
string cost = city == "NYC" ? "HIGH" : "MODERATE";
var query = from row in table
where row.Cost == cost
select new { row.Population, row.Elevation };
但是,如果由于某种原因您仍然需要保持代码的结构,您可以这样做:
static IEnumerable<T> SequenceByExample<T>(T t){ return null; }
...
var query = SequenceByExample(new { Population = 0, Elevation = 0.0 } );
if (whatever)
query = ...
else
query = ...
这是一种名为“cast by example”的技巧的变体,其中您将匿名类型的示例提供给泛型方法。然后,方法类型推断会找出返回类型,并将其用作隐式类型局部变量的类型。在运行时,它什么也不做,只是创建一个无用的对象,然后很快被丢弃。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)