查找以。开头的字符串的索引

时间:2016-09-28 06:34:32

标签: c# observablecollection

我正在使用C#和.NET Framework 4.6.1开发WPF。

我正在使用这行代码:

codesRead.IndexOf(string.Format("{0} OK", lastCode));

codesReadprivate readonly ObservableCollection<string>

当我使用这些字符串"code1 OK"时,它工作正常。

现在我已使用这些字符串"code1 OK - 23.0005 ms"更改字符串,现在它始终返回-1

如何找到以"code1 OK"开头的字符串索引?

2 个答案:

答案 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);