Dot-Net
將 LINQ 與實現非泛型 ICollection 的類一起使用
我想對一個
MatchCollection對象執行 LINQ 查詢,但發現這是不可能的,因為它沒有實現ICollection<T>,只是ICollection。在程式碼簡潔性以及性能和記憶體使用方面,將 LINQ 與非泛型集合一起使用的最佳選擇是什麼?
(如果有興趣,這裡是非 LINQuified 程式碼:)
MatchCollection fieldValues = Regex.Matches(fieldValue, @"(?<id>\d+);#(?<text>[^;|^$]+)"); foreach (Match m in fieldValues) { if (m.Groups["text"].Value.Equals(someString)) { // Do stuff } }
您也可以在 LINQ 中包含您的
someString過濾器。var matches = Regex.Matches(fieldValue, @"(?<id>\d+);#(?<text>[^;|^$]+)"); var textMatches = from Match m in matches where m.Groups["text"].Value.Equals(someString) select m; foreach (Match m in textMatches) { // Do stuff }請注意,編譯器會翻譯這樣的查詢……
var q = from MyType x in myEnum select x;……進入這個……
var q = from x in myEnum.Cast<MyType>() select x;…所以包括類型和
Cast<T>()是多餘的。性能方面,
Cast<T>()只進行顯式類型轉換並產生值,因此性能影響可以忽略不計。對於您不確定所有成員都屬於所需類型的舊集合,您可以OfType<T>()改用。