English 中文(简体)
在C#中变量的初始化
原标题:
  • 时间:2009-01-27 18:16:15
  •  标签:

请考虑以下代码:

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()

问题回答

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

如果你想选择所有的国家,为什么不这样做:

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

遍历每个大洲有什么意义?或者大洲表格中是否有未被Continents属性引用且你没有展示的国家?

我认为您在非最优方式下使用了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;
}

属性国家是基于CountryId值的属性。

你应该听取Jon Skeet 或Nick Berardi的建议,制定更好的查询,但如果你确实有一个好的原因来做这件事,这里是你实际问题的答案:

在离开循环作用域后访问变量ids,您必须在外部声明它。但是,除非在声明变量时给变量赋值,否则不能使用var关键字。因此,您必须显式声明变量类型:

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);
}




相关问题
热门标签