我在 C# 中使用正則運算式,當您測驗正則運算式時,您可以獲得捕獲組的串列,這是System.Text.RegularExpressions.GroupCollection.
所有關于正則運算式的東西都不相關。相關的是我無法查詢GroupCollection使用 LINQ 擴展方法(如Where、First等)的實體,Visual Studio 只是告訴我這些方法不存在。
最初我認為這不是一個可查詢的型別,但是通過查看 Visual Studio 中的類宣告,它看起來是這樣的:
public class GroupCollection : ICollection<Group>, IEnumerable<Group>, IEnumerable,
IEnumerable<KeyValuePair<string, Group>>, IList<Group>,
IReadOnlyCollection<KeyValuePair<string, Group>>, IReadOnlyCollection<Group>,
IReadOnlyDictionary<string, Group>, IReadOnlyList<Group>, ICollection, IList
{
...
}
現在,如果我錯了,請糾正我,但 LINQ 不應該在任何地方都可用IEnumerable<T>嗎?我只是想錯了嗎?我錯過了什么?
uj5u.com熱心網友回復:
您需要訪問 Values 屬性。
GroupCollection c;
c.Values.Where ...
它是 Group 的 IEnumerable 的 values 屬性。
PS 我看到了 GroupCollection 的宣告:
public class GroupCollection :
IList<Group>,
IReadOnlyList<Group>,
IList,
IReadOnlyDictionary<string, Group>
雖然 IList 應該從 IEnumerable 派生,所以,是的,對于為什么我們在 GroupCollection 類上看不到 Linq 方法也有點困惑。
uj5u.com熱心網友回復:
顯然,我沒有考慮一個重要的細節:我正在撰寫的代碼是針對多個 .NET 版本的庫的一部分:
<TargetFrameworks>net5.0-windows;netcoreapp3.1;net461</TargetFrameworks>
顯然,在 .NET 4.6.x 中,GroupCollection該類沒有實作IEnumerable,因此 LINQ 運算式不可用。
在查看內部框架代碼時,Visual Studio 顯然會向您顯示串列中第一個框架的定義,所以我看到的是 .NET 5 的定義
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/515646.html
標籤:C#林克
