gpt4 book ai didi

c# - GroupCollection 上无法访问的可枚举扩展方法

转载 作者:行者123 更新时间:2023-12-05 04:25:41 25 4
gpt4 key购买 nike

根据 the documentation , GroupCollection类实现通用 IEnumerable界面。它的扩展方法甚至在该页面下方列出。然而,我得到了

Compilation error (line 16, col 4): 'GroupCollection' does not contain a definition for 'Skip' and no accessible extension method 'Skip' accepting a first argument of type 'GroupCollection' could be found (are you missing a using directive or an assembly reference?)

对于以下代码:

using System.Linq;
var currency = "HUF";
var origin = "Modlin";
var changes = 3;
System.Console.WriteLine(
new[] {
$"Cost: 50 {currency}",
$"Departure airport: {origin}",
$"Number of changes: {changes}"
}[
System.Text.RegularExpressions.Regex.Matches(
"variable elem: blablaoriginbleble",
"(currency)|(origin)|(changes)"
)[0]
.Groups
.Skip(1)
.Select((m, i) => (m, i))
.First(p => p.Item1.Success)
.Item2
]);

如果我用 ((System.Collections.Generic.IEnumerable<System.Text.RegularExpressions.Group>) 包围 L11-15,错误就会消失和 ) .为什么有必要?

更奇怪的是省略了[0].Groups (在语义上不等同,只是为了实验)也不会导致错误。在这种情况下,扩展方法 Skip , SelectFirstMatchCollection 的实例上被调用.这也实现了 IEnumerable看起来行为应该是类似的。

最佳答案

编辑 2:

我刚刚在 .NET 6 中测试了您的代码并收到了相同的错误消息。我改变了:

.Skip(1)

到:

.Skip<System.Text.RegularExpressions.Group>(1)

它奏效了。我认为问题在于,因为 GroupCollection工具 IEnumerable<T>两种特定类型两次 T ( GroupKeyValuePair<string,Group>> ),无法从用法中推断出类型。这意味着调用Skip时需要指定泛型类型参数所以它知道要使用哪个实现。这与您在对该问题的评论中推测的差不多。

编辑:

我将在下面留下我原来的答案,但是考虑到您的代码,您似乎正在使用顶级语句,因此这意味着您正在使用 .NET 6。我想我们会看到您什么时候回应。如果是,那么我不确定原因是什么。

原创:

该文档适用于 .NET 6。我猜您使用的是早期版本。您应该在该页面的左上角选择您的 .NET 版本,我希望您会发现,在那个版本中,GroupCollection实现的接口(interface)少得多。例如,它只实现了 ICollection在 .NET Framework 4.8 中。你能做的就是调用Cast<T>得到一个IEnumerable<T>然后访问该接口(interface)的所有扩展方法:

using System.Linq;
using System.Text.RegularExpressions;

var currency = "HUF";
var origin = "Modlin";
var changes = 3;

System.Console.WriteLine(
new[] {
$"Cost: 50 {currency}",
$"Departure airport: {origin}",
$"Number of changes: {changes}"
}[
Regex.Matches(
"variable elem: blablaoriginbleble",
"(currency)|(origin)|(changes)"
)[0]
.Groups
.Cast<Group>()
.Skip(1)
.Select((m, i) => (m, i))
.First(p => p.Item1.Success)
.Item2
]);

关于c# - GroupCollection 上无法访问的可枚举扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73180633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com