我有一个包含所有美国邮政编码的清单,每个邮政编码包含3个元素。因此列表是~45,000 x 3个字符串。加载它的最佳方法是什么,基本上是最有效/优化的?现在我有一个foreach循环运行它,每次它到达加载点就会挂起。有更好的方法吗?
修改
使用此方法是为了让用户能够输入邮政编码并将城市和州显示在另外两个文本框中。现在我把它设置为检查用户类型,输入污垢号后冻结,我相信ZipCodes代码=新ZipCodes()
这是我目前正在使用的代码。我留下了其中一个zipCode.Add
语句,但删除了另外一个44,999。
struct ZipCode
{
private String cvZipCode;
private String cvCity;
private String cvState;
public string ZipCodeID { get { return cvZipCode; } }
public string City { get { return cvCity; } }
public string State { get { return cvState; } }
public ZipCode(string zipCode, string city, string state)
{
cvZipCode = zipCode;
cvCity = city;
cvState = state;
}
public override string ToString()
{
return City.ToString() + ", " + State.ToString();
}
}
class ZipCodes
{
private List<ZipCode> zipCodes = new List<ZipCode>();
public ZipCodes()
{
zipCodes.Add(new ZipCode("97475","SPRINGFIELD","OR"));
}
public IEnumerable<ZipCode> GetLocation()
{
return zipCodes;
}
public IEnumerable<ZipCode> GetLocationZipCode(string zipCode)
{
return zipCodes;
}
public IEnumerable<ZipCode> GetLocationCities(string city)
{
return zipCodes;
}
public IEnumerable<ZipCode> GetLocationStates(string state)
{
return zipCodes;
}
}
private void LocateZipCode(TextBox source, TextBox destination, TextBox destination2 = null)
{
ZipCodes zips = new ZipCodes();
string tempZipCode;
List<ZipCode> zipCodes = new List<ZipCode>();
try
{
if (source.Text.Length == 5)
{
tempZipCode = source.Text.Substring(0, 5);
dataWorker.RunWorkerAsync();
destination.Text = zipCodes.Find(searchZipCode => searchZipCode.ZipCodeID == tempZipCode).City.ToString();
if (destination2.Text != null)
{
destination2.Text = zipCodes.Find(searchZipCode => searchZipCode.ZipCodeID == tempZipCode).State.ToString();
}
}
else destination2.Text = "";
}
catch (NullReferenceException)
{
destination.Text = "Invalid Zip Code";
if (destination2 != null)
{
destination2.Text = "";
}
}
}
答案 0 :(得分:3)
有几个选项取决于您的用例和目标客户端计算机。
答案 1 :(得分:0)
不是加载所有项目,而是尝试按需加载。例如,当用户输入前三个字母然后查询列表并仅返回匹配的项目。在silverlight和ajax中都存在许多用于此目的的控件。
答案 2 :(得分:0)
感谢所有回复,我真的很感激他们。一对我真的不明白,但我知道这是我自己在c#的某些方面缺乏知识。在研究它们的过程中,我偶然发现了一个使用Dictionary<T>
代替List的漂亮工作的不同解决方案。即使不使用BackgroundWorker
,它也会在大约5秒钟内启动应用启动。我之前听说过Dictionary<T>
,但直到现在从未有过使用/研究它的原因,所以这对我来说是双重益处。再次感谢所有的帮助!