我正在开发一个程序,其中(除其他外)将通过邮政编码找到任何美国城市,或者按城市查找任何邮政编码。我有一个存储在.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;
此方法适用于返回城市,但是当用户按城市搜索时,该程序必须返回多个邮政编码。目前我的此流程代码如下:
txtZipcode.Text = cities
.Find(s => (s.Name == txtCity.Text.Split(',')[0]))
.ZipCode
.ToString();
对C#不熟悉,我想我可以将cities.Find
更改为cities.FindAll
。但是当我执行此操作时,它不允许我包含.ZipCode
,并且删除.ZipCode
后,程序会在文本框中返回System.Collections.Generic.List
1 [MyConvert.formLookup + City]`。 / p>
有没有更好的方法可以返回与特定城市相关的所有邮政编码?
如果它有用,如果我尝试包含.ZipCode
,我得到的确切错误是:
错误1
'System.Collections.Generic.List<MyConvert.formLookup.City>'
不包含'ZipCode'的定义,并且没有扩展方法'ZipCode'接受类型'System.Collections.Generic.List'的第一个参数可以找到(你是否错过了使用指令或汇编参考?)“
答案 0 :(得分:1)
因为,您现在有多个zipcodes尝试首先转换为列表 -
txtZipcode.Text = String.Join(",", cities.FindAll(s => (s.Name == txtCity.Text.Split(',')[0])).Select(s=>s.Zipcode.ToString() ));
答案 1 :(得分:1)
像
这样的东西var sought = txtCity.Text.Split(',')[0];
string.Join(",", cities.FindAll( s => s.Name == sought ).Select(zi => zi.ZipCode.ToString()));