c# FindAll方法:我正在与语法作斗争

本文关键字:语法 斗争 FindAll 方法 | 更新日期: 2023-09-27 18:15:59

首先,非常感谢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
}

我做错了什么?

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

谢谢!

c# FindAll方法:我正在与语法作斗争

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

Name应该是s.Name。(return后面没有分号,FindAll的大小写也不正确。)你也可以把它变成一行。像这样:

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