C# LINQ-在IEnumerable中选择第二项
我有C# LINQ-在IEnumerable中选择第二项,c#,linq,.net-3.5,c#-3.0,C#,Linq,.net 3.5,C# 3.0,我有 string[]pkgratio=“1:2:6” 我想选择中间值,并得出了这个结论。这是在IENumber表中选择第二个值的正确方法吗 pkgratio.Skip(1).Take(1).First(); 虽然您所做的工作正常,但最直接的方法是使用数组的索引并引用第二项(在索引1处,因为第一个元素的索引从零开始):pkgratio[1] Console.WriteLine(pkgratio[1]); 一个更完整的示例: string[] pkgratio = "1:2:6".Split(
string[]pkgratio=“1:2:6”代码>
我想选择中间值,并得出了这个结论。这是在IENumber表中选择第二个值的正确方法吗
pkgratio.Skip(1).Take(1).First();
虽然您所做的工作正常,但最直接的方法是使用数组的索引并引用第二项(在索引1处,因为第一个元素的索引从零开始):pkgratio[1]
Console.WriteLine(pkgratio[1]);
一个更完整的示例:
string[] pkgratio = "1:2:6".Split(':');
for (int i = 0; i < pkgratio.Length; i++)
Console.WriteLine(pkgratio[i]);
这是一个IEnumerable
示例。请注意,AsEnumerable()
调用是为了强调示例针对IEnumerable
工作。实际上,您可以对拆分
的字符串[]
数组结果使用ElementAt
,但是使用前面显示的索引器更有效
var pkgratio = "1:2:6".Split(':').AsEnumerable();
Console.WriteLine(pkgratio.ElementAt(1));
pkgratio.ElementAt(1)代码>用于您的场景
但是,您的方法仅适用于使用实现了IQueryable
的某些数据或需要从特定索引开始获取一系列项目的情况,例如:
pkgratio.Skip(5)、Take(10)代码>我认为你不需要。取(1)
嗯,Take(1)
并不是严格意义上的必要条件,如果你只想First()
pkgratio.Skip(1).First();
但是,如果没有值,First()
将抛出异常,因此您可能希望尝试FirstOrDefault()
,然后检查null。与我的第一个问题相关:使用First()
意味着您确信某个项目将实际位于您尝试访问的位置。如果有任何疑问,您可能希望使用FirstOrDefault()
。与Linq合作多年,从未使用过ElementAt()。忙着写一些测试,需要它。很好的简单答案这里相同,ElementAt为+1,现在也使用ElementAtOrDefault
var pkgratio = "1:2:6".Split(':').AsEnumerable();
Console.WriteLine(pkgratio.ElementAt(1));
pkgratio.Skip(1).First()
pkgratio.Skip(1).First();