C#FindAll方法:我正在努力学习语法

时间:2011-11-27 22:50:00

标签: c#

首先,感谢StackOverflow社区。我是C#的新手,这个小组已经多次把我从火中拉出来了!

问题:我在使用C#FindAll方法时遇到了一些麻烦。具体来说,我无法使其发挥作用,我知道这是我......

效果很好的东西:

public class City
{
   public string Name {get;set;}
   public string Country {get;set;}
}

public List<City> GetCities()
{
   List<City> cities = new List<City>();
   cities.Add(new City() { Name = "Istanbul", Country = "Turkey" });
   // etc, add a bunch more cities, including multiple entries for 
   // some cities
   return cities;
}

现在什么都不起作用...... (它返回所有城市或没有城市(取决于我如何摆弄语法)。

public static List<> ReturnCityList(string CityName)
{
  Cities = GetCities;
  var RequestedCities = Cities.Findall(s => Name.Equals(CityName));
  return RequestedCities
}

我做错了什么?

我已经阅读了很多例子,但我遗漏了一些东西。

谢谢!

2 个答案:

答案 0 :(得分:9)

var RequestedCities = Cities.Findall(s => Name.Equals(CityName));

Name来自哪里?你是说这个吗?

var RequestedCities = Cities.Findall(s => s.Name.Equals(CityName));

甚至

var RequestedCities = Cities.Findall(s => s.Name == CityName);

使用更简单的语法可以做同样的事情。

您没有使用s变量,即在迭代中保存当前元素的变量。这就是您可能需要检查CityName的内容。我怀疑你的版本甚至编译。也...

public static List<> ReturnCityList(string CityName)

那不会编译。您不能使用空泛型参数,您需要将返回值指定为List<City>,然后您需要在查询结果上调用ToList()。还有一些其他错误。

老实说,你应该只返回一个IEnumurable<City>,因为调用者可能不需要修改返回值,只需枚举它。

又一次挑剔;方法参数按惯例使用camelCase,而不是PascalCase,局部变量也是如此。

答案 1 :(得分:4)

Name应为s.Name。 (并且在return之后没有分号,并且FindAll的大小写不正确。)您也可以将其转换为一行。像这样:

public static List<City> ReturnCityList(string CityName) {
    return GetCities.FindAll(s => s.Name == CityName).ToList();
}