我有一個整數串列,我需要找到與謂詞匹配的最后一次出現。使用一個非常簡單的例子:
var myList = new List<int> { 1, 5, 6, 20, 18, 2, 3, 0, 4 };
var lastMatch = myList.FindLast(e => e == 0 || e == 2);
這似乎是FindLast. 問題是這個方法default(T)在沒有找到任何東西時回傳,在整數的情況下,它實際上是一個有效值0。所以問題是,如果這個方法回傳0,我怎么知道它是否找到了什么?對于這種情況,有沒有更好的方法來處理整數?
uj5u.com熱心網友回復:
使用FindLastIndex來代替。如果索引為負,則未找到匹配項。如果它不是負數:這就是您想要的索引,因此:使用帶有該索引的索引器。
uj5u.com熱心網友回復:
作為@MarcGravell 答案的替代FindLast方法:您可以使用將Last謂詞作為引數的 Linq擴展方法多載,而不是 List方法。如果找不到匹配項,它將拋出例外。
請參閱上次檔案
uj5u.com熱心網友回復:
在一般情況下,當我們有IEnumerable<T>與任意的 T(我們不能玩把戲int?現在),我們可以實作一個擴展方法:
public static partial class EnumerableExtensions {
public static int LastIndex<T>(this IEnumerable<T> source,
Predicate<T> predicate) {
if (source is null)
throw new ArgumentNullException(nameof(source));
if (predicate is null)
throw new ArgumentNullException(nameof(predicate));
int result = -1;
int index = -1;
foreach (T item in source) {
index = 1;
if (predicate(item))
result = index;
}
return result;
}
}
接著
var lastMatch = myList.LastIndex(e => e == 0 || e == 2);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/380049.html
