我正在使用C#和.NET Framework 4.6.1开发WPF。
我正在使用这行代码:
codesRead.IndexOf(string.Format("{0} OK", lastCode));
codesRead
是private readonly ObservableCollection<string>
。
当我使用这些字符串"code1 OK"
时,它工作正常。
现在我已使用这些字符串"code1 OK - 23.0005 ms"
更改字符串,现在它始终返回-1
。
如何找到以"code1 OK"
开头的字符串索引?
答案 0 :(得分:3)
您可以使用Find
子句获取元素,然后使用IndexOf
搜索它。这是一个小型控制台应用程序来说明这一点:
List<string> asd = new List<string>
{ "code5 OK - 234", "code2 OK - 234", "code1 OK - 234", "code4 FAIL - 234" };
int index = asd.IndexOf(asd.Find(x => x.StartsWith("code1")));
Console.WriteLine(index);
如果元素不存在,它将返回-1
ObservableCollection
,我建议您使用FirstOrDefault
来搜索该项目。这是一个带有负面结果的例子:
ObservableCollection<string> qwe = new ObservableCollection<string>()
{ "code5 OK - 234", "code2 OK - 234", "code7 OK - 234" };
int index = qwe.IndexOf(qwe.FirstOrDefault(x => x.StartsWith("code1")));
Console.WriteLine(index);
答案 1 :(得分:0)
你可以先用项目投射索引,然后搜索你想要的元素,最后得到索引。
var result =
source
.Select ((item, index) => new { item, index })
.Where (tmp => tmp.item.StartsWith ("theStart"))
.Select (tmp => tmp.index); // if you just want the indexes
如果需要,您可以将Where
替换为First[OrDefault]
或Single[OrDefault]
您可以将StartsWith
替换为IndexOf
,并使用0来测试相等性。
如果您对该值不感兴趣而只对索引感兴趣,则可以直接在第一个StartsWith
IndexOf
/ Select
var result =
source
.Select (item, index) => new { index, isValid = item.StartsWith ("theStart") })
.Where (tmp => tmp.isValid)
.Select (tmp => tmp.index);