[英]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.