2011-11-27 25 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(); 
}