2011-11-27 47 views
1

首先,感谢吨StackOverflow社区。我是C#的新手,这个团队已经把我从火中拉出了很多次!C#FindAll方法:我正在努力的语法

问题:我对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 
} 

我在做什么错?

我读过很多例子,但我错过了一些东西。

谢谢!

+1

仅供参考:您不需要'Equals'字符串,'=='运算符会被重载。 – harold

+1

我想,应该是s => s.Name .... GetCities在这种情况下应该是静态的,不是吗? – Natan

回答

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,就像局部变量一样。

+0

谢谢!我用“var RequestedCities = Cities.Findall(s => s.Name == CityName);”那正是票。也感谢其他提示! – Jonesome

4

Name应该是s.Name。 (在return之后没有分号,而FindAll的大小写是不正确的。)您也可以将它变成一行。因此,如下所示:

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