您的解決方案應該工作......匹配的最後一行,只有那一行。
雖然LINQ可以幫助你。這是一個應該可以工作的解決方案。
tuitDisplayTextBox.Text =
File.ReadLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt")
.Where(n => n.Contains(searchTextBox.Text)).Aggregate((a, b) =>
a + Enviroment.NewLine + b);
在這裏,它的作用是讀取文件的行爲IEnumerable<string>
,然後我篩選與Where
方法,這基本上意味着「如果這個元素的條件爲真,增加這個要素到要返回的東西的列表,否則不要添加它「。然後Aggregate
有點複雜。基本上它是從集合中獲取前兩個項目,然後通過它們傳遞一個返回值的lambda。然後用該結果和第三個元素再次調用lambda。然後,即結果並用第四個元素調用它。等等。
下面是一些代碼更類似於你也將工作:
tuitDisplayTextBox.Text = "";
IEnumerable<string> lines =
File.ReadAllLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt");
StringBuilder sb = new StringBuilder
foreach (string line in lines)
{
if (line.Contains(searchTextBox.Text))
{
sb.AppendLine(line);
}
}
tuitDisplayTextBox.Text = sb.ToString();
這是一個有點不同。首先它將所有線路讀入IEnumerable<string>
稱爲線路。然後它產生一個StringBuilder
對象(基本上是一個可變的string
)。之後,它會在IEnumerable<string>
(我認爲在這裏更合適)中使用這些行,然後如果該行包含所需的文本,則會將該行和一個換行符添加到StringBuilder
對象。之後,它將您的文本框的文本設置爲所有這些結果,方法是獲取StringBuilder
實例的string
表示形式。
如果你真的想一個for循環,這裏的修改,以使用一個for循環的代碼:
tuitDisplayTextBox.Text = "";
string[] lines =
File.ReadAllLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt");
StringBuilder sb = new StringBuilder
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].Contains(searchTextBox.Text))
{
sb.AppendLine(lines[i]);
}
}
tuitDisplayTextBox.Text = sb.ToString();
我猜這只是把最後一行放在它裏面,我是對嗎?我會發佈一個應該工作的LINQ解決方案。 –
代碼不會結果什麼? – matzone
code does not result anything –