我有
string[] pkgratio = "1:2:6".Split(':');
var items = pkgratio.OrderByDescending(x => x);
我想选择中间的值,并想到了这种方法。这是在 IEnumberable 中选择第二个值的正确方式吗?
pkgratio.Skip(1).Take(1).First();
虽然您的代码能够正常运行,但更为简单的方法是使用数组的索引,并引用第二个元素(因为索引从零开始,第一个元素的索引为0):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<T>
,那么你所做的就可以了,或者你可以直接使用 ElementAt
方法来获取元素:
// same idea, zero index applies here too
var elem = result.ElementAt(1);
这是作为 IEnumerable<string>
的示例。请注意,AsEnumerable()
调用是为了强调该示例适用于 IEnumerable<string>
。实际上,您可以对来自 Split
的 string[]
数组结果使用 ElementAt
,但使用之前显示的索引器更有效率。
var pkgratio = "1:2:6".Split(':').AsEnumerable();
Console.WriteLine(pkgratio.ElementAt(1));
我认为你不需要使用.Take(1)
。
pkgratio.Skip(1).First()
对于你的情况,可以使用 pkgratio.ElementAt(1);
方法。
但是,你的方法仅适用于使用了实现了 IQueryable
接口的数据或者需要从特定索引开始取一定范围内的项的情况。比如:
pkgratio.Skip(5).Take(10);
好的,如果你只是要使用 First()
,那么 Take(1)
并不是必需的,所以我可能会使用
pkgratio.Skip(1).First();
但是,如果没有值,那么First()
将抛出一个异常,因此您可能希望尝试使用FirstOrDefault()
,然后检查是否为null。
First()
意味着您有信心在尝试访问的位置上实际上会有一个项目。如果存在任何疑虑,您可能希望使用FirstOrDefault()
。 - Anthony Pegram