[英]Is there a concise built-in way to get a list item by index that is not going to throw an exception?
我安全地在列表中搜索这样的对象:
var someResult = myList.FirstOrDefault(x=>x.SomeValue == "SomethingHere");
如果没有符合我标准的对象,那么someResult
将为null。
但如果我只有我想要的对象的索引,事情就不那么好了。 我似乎必须这样:
try
{
var someResult = myList[4];
}
catch (ArgumentOutOfRangeException)
{
someResult = null;
}
我承认不得不写下来并不可怕。 但在我看来,如果索引最终是假的,应该有一种方法让列表返回null。
是否有使用现有的.net方法查找一行(或两行)?
(我知道我可以很容易地编写扩展方法,但我想知道是否有内置方法来执行此操作。)
您可以使用LINQ扩展名.ElementAtOrDefault()来实现您想要的。
List<Foo> foos = new List<Foo>();
Foo element = foos.ElementAtOrDefault(4);
但是,您需要注意List<T>
泛型类型是引用类型或字符串,因此返回给您的“default”实际上为null。 您获得的默认值是默认值(T)。
是的,当你只有索引时,你也可以使用LINQ:
var someResult = myList
.Select((x, i) => new { X = x, Index = i })
.FirstOrDefault(x => x.Index == 4);
Enumerable.Select方法(IEnumerable,Func)
通过合并元素的索引,将序列的每个元素投影到新的形式中。
CB的答案获胜,但我可以争夺第二名,对吗?
var someResult = myList.Skip(4).FirstOrDefault();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.