【发布时间】:2011-04-28 23:37:21
【问题描述】:
我有一个文本文件,我在其中存储地址簿的条目。 布局是这样的:
姓名:
联系方式:
产品:
数量:
我已经编写了一些 linq 代码来获取名称和接下来的四行,用于按名称搜索功能。 我也希望能够按联系人搜索。 挑战是匹配联系信息,抓住接下来的 3 行,并在比赛前抓住行。 这样,如果使用按联系人搜索,则会返回完整的信息列表。
private void buttonSearch_Click(object sender, EventArgs e)
{
string[] lines = File.ReadAllLines("C:/AddressBook/Customers.txt");
string name = textBoxSearchName.Text;
string contact = textBoxContact.Text;
if (name == "" && contact == "")
{
return;
}
var byName = from line in lines
where line.Contains(name)
select lines.SkipWhile(f => f != line).Take(4);
//var byContact = from line in lines
// where line.Contains(name)
// select lines.SkipWhile(f => f != name).Take(4);
if (name != "")
{
foreach (var item in byName)
foreach (var line in item) { listBox2.Items.Add(line); }
listBox2.Items.Add("");
}
//if (contact != "")
//{
// foreach (var item in byContact)
// foreach (var line in item) { listBox2.Items.Add(line); }
//listBox2.Items.Add("");
}
}
【问题讨论】:
-
if (name != "")没有必要,因为您已经检查了 name 是否为空并返回,foreach 将遍历所有找到的项目,因此如果没有,它将不会运行,所以也不是问题。