我知道,这对你们来说非常简单.
请考虑以下代码:
请考虑以下代码:
string[] str = { "dataReader","dataTable","gridView","textBox","bool" }; var s = from n in str where n.StartsWith("data") select n; foreach (var x in s) { Console.WriteLine(x.ToString()); } Console.ReadLine();
据说,它将打印:
dataReader dataTable
对?
例如,如果我不知道数据,以及查询的结果是什么(但我确定它会返回一些结果),我只想打印查询将生成的第二个项目,我的代码应该是什么而不是使用foreach?
这里有像数组索引这样的东西吗?
解决方法
你在找
Enumerable.ElementAt
.
var secondMatch = str.Where(item => item.StartsWith("data")) //consider null-test .ElementAt(1); Console.WriteLine(secondMatch); //ToString() is redundant
由于它的结果是有效的,所以这将是有效的 – 在第二次匹配(你感兴趣的那个)之后,源序列的枚举将被终止.
如果您发现隐含的保证您的源将包含两个匹配项无效,则可以使用ElementAtOrDefault
.
var secondMatch = str.Where(item => item.StartsWith("data")) .ElementAtOrDefault(1); if(secondMatch == null) // because default(string) == null { // There are no matches or just a single match.. } else { // Second match found.. }
你可以在这里使用数组索引,但只有在将结果加载到…数组后才能使用.这当然意味着必须枚举整个源序列并将匹配加载到数组中,所以如果您只对第二场比赛感兴趣,那就有点浪费了.
var secondMatch = str.Where(item => item.StartsWith("data")) .ToArray()[1]; //ElementAt will will work too