此代碼有效,但即使檔案中有兩個文本,也只能找到一個文本,但有時可能有兩個以上。
var d = File.ReadAllLines(filePath);
var t = d.Where(g => g.Contains(cotainstring));
string[] splited;
foreach (var item in t)
{
splited = item.Split(new string[] { cotainstring}, StringSplitOptions.None);
return splited[1];
}
return null;
這是一個用于閱讀的示例檔案。
"?????????????"
{
"AccountName" "dummy1"
"PersonaName" "imdummy1"
"RememberPassword" "1"
"MostRecent" "0"
"Timestamp" "boring"
"WantsOfflineMode" "0"
"SkipOfflineModeWarning" "0"
}
和
"?????????????"
{
"AccountName" "dummy2"
"PersonaName" "imdummy2"
"RememberPassword" "1"
"MostRecent" "0"
"Timestamp" "boring"
"WantsOfflineMode" "0"
"SkipOfflineModeWarning" "0"
}
但我的代碼只得到 dummy1,而不是 dummy2 我想得到虛擬一和虛擬二。
uj5u.com熱心網友回復:
因為您foreach在第一次迭代后退出回圈。不是從 foreach 回圈回傳,而是將每個字串存盤到一個List<string>并最終回傳整個串列。
var d = File.ReadAllLines(filePath);
var t = d.Where(g => g.Contains(cotainstring));
//Defin result to store all satisfied strings.
List<string> result = new List<string>();
foreach (var item in t)
{
var splited = item.Split(new string[] { cotainstring}, StringSplitOptions.None);
//Store the string in List, instead of return
result.Add(splited[1]);
}
//Return entire string.
return result;
如果上面的代碼寫在函式內部,則需要將該函式的回傳型別從 更新string為List<string>
uj5u.com熱心網友回復:
您可以嘗試使用Linq Select和一些 kinf of materialization,比如.ToArray()獲取一組假人:
var lines = File
.ReadLines(filPath)
.Where(line => line.Contains(containstring)) // original query
.Select(line => line.Split( // Select added
new string[] { containstring },
StringSplitOptions.None))
.Select(items => items[1])
.ToArray();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/369796.html
下一篇:字串函式的應用
