是否有一种简洁的内置方式来获取不会引发异常的索引的列表项?

Vac*_*ano 5 .net c# linq list

我安全地在列表中搜索这样的对象:

var someResult = myList.FirstOrDefault(x=>x.SomeValue == "SomethingHere");
Run Code Online (Sandbox Code Playgroud)

如果没有符合我标准的对象,那么someResult将为null.

但如果我只有我想要的对象的索引,事情就不那么好了.我似乎必须这样:

try
{
    var someResult = myList[4];
}
catch (ArgumentOutOfRangeException)
{
    someResult = null;
}
Run Code Online (Sandbox Code Playgroud)

我承认不得不写下来并不可怕.但在我看来,如果索引最终是假的,应该有一种方法让列表返回null.

是否有使用现有的.net方法查找一行(或两行)?

(我知道我可以很容易地编写扩展方法,但我想知道是否有内置方法来执行此操作.)

Mar*_*ers 11

我想你想的CB建议ElementAtOrDefault-去投上一票.

我还有几点需要补充......

关于您的try/catch解决方案:

我承认不得不写下来并不可怕.

不要使用例外.您的方法更冗长,异常缓慢,因此您将获得较差的性能,异常应仅用于特殊情况.


使用条件运算符在没有LINQ的情况下编写它也相当容易:

var someResult = myList.Count > 4 ? myList[4] : null;
Run Code Online (Sandbox Code Playgroud)


C B*_*C B 10

您可以使用LINQ扩展名.ElementAtOrDefault()来实现您想要的.

List<Foo> foos = new List<Foo>();
Foo element = foos.ElementAtOrDefault(4);
Run Code Online (Sandbox Code Playgroud)

但是,您需要注意您的泛型类型List<T>是引用类型或字符串,因此返回给您的"默认"实际上是null.您获得的默认值是默认值(T).