1

我正在开发一个程序,该程序(除其他外)将按邮政编码查找任何美国城市,或按城市查找任何邮政编码。我将邮政编码和城市信息存储在 .csv 中,并且我成功地将这些数据拉入并存储。

正如您从下面的代码中看到的那样,现在我正在找到与City特定邮政编码相关的第一个(最后一行代码):

class City
{
    public string Name { get; set; }
    public int ZipCode { get; set; }
    public string State { get; set; }
}

private void btnConvert2City_Click(object sender, EventArgs e)
{
    try
    {
        Boolean firstLoop = true;
        string dir = System.IO.Path.GetDirectoryName(
        System.Reflection.Assembly.GetExecutingAssembly().Location);

        string path = dir + @"\zip_code_database_edited.csv";
        var open = new StreamReader(File.OpenRead(path));

        List<City> cities = new List<City>();
        foreach (String s in File.ReadAllLines(path))
        {
            if (firstLoop)
            {
                firstLoop = false;
                continue;
            }

            City temp = new City();
            temp.ZipCode = int.Parse(s.Split(',')[0]);
            temp.Name = s.Split(',')[1];
            temp.State = s.Split(',')[2];
            cities.Add(temp);
        }

        txtCity.Text = cities
            .Find(s => s.ZipCode == Int32.Parse(txtZipcode.Text))
            .Name;

此方法非常适合返回城市,但是当用户按城市搜索时,程序必须返回 MANY 邮政编码。目前我的这个过程的代码如下:

txtZipcode.Text = cities
    .Find(s => (s.Name == txtCity.Text.Split(',')[0]))
    .ZipCode
    .ToString();

作为 C# 新手,我想我可以更改cities.Findcities.FindAll. 但是,当我这样做时,它不允许我包含.ZipCode,并且.ZipCode删除后,程序会在文本框中返回System.Collections.Generic.List1[MyConvert.formLookup+City]`。

有没有更好的方法可以返回与特定城市相关的所有邮政编码?

如果它有帮助,如果我尝试包含,我得到的确切错误.ZipCode是:

错误 1 'System.Collections.Generic.List<MyConvert.formLookup.City>'​​不包含“ZipCode”的定义,并且找不到接受“System.Collections.Generic.List”类型的第一个参数的扩展方法“ZipCode”(您是否缺少 using 指令或程序集引用?)”

4

2 回答 2

1

因为,您现在有多个邮政编码,请先尝试转换为列表 -

txtZipcode.Text = String.Join(",", cities.FindAll(s => (s.Name == txtCity.Text.Split(',')[0])).Select(s=>s.Zipcode.ToString() ));
于 2013-11-07T23:33:07.843 回答
1

就像是

var sought = txtCity.Text.Split(',')[0];
string.Join(",", cities.FindAll( s => s.Name == sought ).Select(zi => zi.ZipCode.ToString()));
于 2013-11-07T23:33:21.970 回答