C#中var的初始化

时间:2009-01-27 18:16:16

标签: c# winforms linq var

请考虑以下代码:

public IEnumerable <Country> ListPopulation()
{
    foreach(var continent in Continents)
    {
        var ids = context.continentTable
                   .where(y=>y.Name == continent.name)
                   .select(x=>x.countryId);

    }

    return GetPopulation(ids);// ids is not available here
}

Public IEnumerable<Country>GetPopulation(IQueryable<int> idnumbers)
{

}

如何初始化 var ids ,以便我可以用它来拨打GetPopulation()

3 个答案:

答案 0 :(得分:5)

嗯,主要问题与使用“var”无关。你有一个foreach循环,其中声明了变量,然后你尝试使用该变量从循环返回循环。您期望价值是什么?

如果您尝试选择所有国家/地区,为什么不这样做:

public IEnumerable <Country> ListPopulation()
{
    return GetPopulation(context.continentTable.Select(x => x.countryId));
}

迭代每个大陆的重点是什么?或者大陆表中的国家/地区是否未被您未展示的大陆财产引用?

答案 1 :(得分:2)

我认为您以非最佳方式使用LINQ

var ids = from c in context.continetTable
          select c.countryId

然后根据这些ID进行查找,但是我不知道您的数据模型,但如果您的内容和国家/地区表已关联,那么这样做会更容易。

public IEnumerable <Country> ListPopulation()
{
    return from c in context.contentTable
           select c.Country;
}

如果属性Country是基于CountryId值的属性。

答案 2 :(得分:2)

您应该遵循Jon Skeet或者Nick Berardi的建议,并且只是提出一个更好的查询,但如果您确实有充分的理由这样做,那么这就是您实际问题的答案:

为了能够在离开循环范围后访问变量 ids ,你必须在外面声明它。但是,除非在声明变量时分配给变量,否则不能使用 var -keyword。所以你必须明确声明类型:

public IEnumerable <Country> ListPopulation()
{
  IQueryable<Country> ids;
  foreach(var continent in Continents)
  {
    var ids = context.continentTable
              .Where(y=>y.Name == continent.Name)
              .Select(x=>x.countryId);
  }

  return GetPopulation(ids);
}