检查列表中是否存在位置[x]的元素

JGi*_*tin 73 c# list

如果我有一个字符串列表

List<String> list = new list<String>();
list.add("str1");
list.add("str2");
list.add("str3");
Run Code Online (Sandbox Code Playgroud)

并且我想知道例如索引位置2是否包含元素,是否有一种简单的方法可以在不计算列表长度或使用try catch的情况下执行此操作?

因为这会失败,我可以尝试捕获它,但这似乎过多

if(list.ElementAt(2) != null)
{
   // logic
}
Run Code Online (Sandbox Code Playgroud)

Yur*_*ich 176

if(list.ElementAtOrDefault(2) != null)
{
   // logic
}
Run Code Online (Sandbox Code Playgroud)

ElementAtOrDefault()是System.Linq命名空间的一部分.

虽然你有一个List,所以你可以使用list.Count > 2.

  • 比常规.Count检查更快阅读,但请注意,"null"项目在列表中是理论上有效的,因此如果不满足测试,请不要依赖此项来抛出异常. (3认同)
  • 您可以使用 [?? 运算符](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator) 即.```list.ElementAtOrDefault(2)??defaultvalue``` (2认同)
  • 如果列表是“List&lt;string&gt;”或“List&lt;int?&gt;”怎么办?如果索引 2 处的元素存在,但值为“null”怎么办?`null` 并不意味着不存在元素 2。 (2认同)

Ant*_*ram 8

if (list.Count > desiredIndex && list[desiredIndex] != null)
{
    // logic
}
Run Code Online (Sandbox Code Playgroud)

  • 即使满足list.Count> desiredIndex,如果index <0,检索元素也会抛出异常 (4认同)
  • 好吧,那是吹毛求疵。requiredIndex 可能是正数。如果这不是可靠的声明,只需添加 desiredIndex &gt; -1.. (2认同)
  • @SubjectX - 不是挑剔。通常使用 `IndexOf` 返回的索引,它可以是 -1 (2认同)