首先,感谢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
}
我做错了什么?
我已经阅读了很多例子,但我遗漏了一些东西。
谢谢!
答案 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();
}