C# 为什么Enumerable.Zip()的2参数重载在.NET Core中,而不是在.NET标准中?

C# 为什么Enumerable.Zip()的2参数重载在.NET Core中,而不是在.NET标准中?,c#,.net-core,.net-standard,C#,.net Core,.net Standard,我在Visual Studio中创建了一个新项目,类型为类库、.NET Core、C#,并粘贴到以下代码中: using System; using System.Collections.Generic; using System.Linq; namespace MyLibrary { public class Class1 { public void Method() { var numbers = new List&l

我在Visual Studio中创建了一个新项目,类型为类库、.NET Core、C#,并粘贴到以下代码中:

using System;
using System.Collections.Generic;
using System.Linq;

namespace MyLibrary
{
    public class Class1
    {
        public void Method()
        {
            var numbers = new List<int> { 1, 2, 3 };
            var chars = new List<char> { 'a', 'b', 'c' };

            foreach (var (n, c) in Enumerable.Zip(numbers, chars))
            {
                Console.WriteLine($"{n}, {c}");
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
名称空间MyLibrary
{
公共班级1
{
公开作废法()
{
变量编号=新列表{1,2,3};
var chars=新列表{'a','b','c'};
foreach(Enumerable.Zip中的var(n,c)(数字,字符))
{
Console.WriteLine($“{n},{c}”);
}
}
}
}
编译器毫无怨言地接受了这一点

现在,我创建了一个新项目,类型为class library、.NET Standard、C#,并粘贴到相同的代码中并更改名称空间。编译器现在给出以下错误:

1>[path]\Class1.cs(15,47,15,50): error CS7036: There is no argument given that corresponds to the required formal parameter 'resultSelector' of 'Enumerable.Zip<TFirst, TSecond, TResult>(IEnumerable<TFirst>, IEnumerable<TSecond>, Func<TFirst, TSecond, TResult>)'
1>[path]\Class1.cs(15,36,15,66): error CS1061: 'TResult' does not contain a definition for 'Deconstruct' and no accessible extension method 'Deconstruct' accepting a first argument of type 'TResult' could be found (are you missing a using directive or an assembly reference?)
1>[path]\Class1.cs(15,36,15,66): error CS8129: No suitable 'Deconstruct' instance or extension method was found for type 'TResult', with 2 out parameters and a void return type.
1>[path]\Class1.cs(15,27,15,28): error CS8130: Cannot infer the type of implicitly-typed deconstruction variable 'n'.
1>[path]\Class1.cs(15,30,15,31): error CS8130: Cannot infer the type of implicitly-typed deconstruction variable 'c'.
1>[路径]\Class1.cs(15,47,15,50):错误CS7036:未给出与“Enumerable.Zip(IEnumerable,IEnumerable,Func)”的必需形式参数“resultSelector”对应的参数
1> [路径]\Class1.cs(15,36,15,66):错误CS1061:“TResult”不包含“Deconstruct”的定义,并且找不到接受“TResult”类型的第一个参数的可访问扩展方法“Deconstruct”(是否缺少using指令或程序集引用?)
1> [路径]\Class1.cs(15,36,15,66):错误CS8129:找不到类型为“TResult”的合适的“解构”实例或扩展方法,具有2个out参数和一个void返回类型。
1> [path]\Class1.cs(15,27,15,28):错误CS8130:无法推断隐式类型解构变量“n”的类型。
1> [路径]\Class1.cs(15,30,15,31):错误CS8130:无法推断隐式类型解构变量“c”的类型。

如果我在代码的每个副本中调用Enumerable.Zip上的“go to definition”,我会看到在.NET核心项目可访问的Enumerable中有两个Zip()重载,但在.NET标准项目可访问的Enumerable中只有一个。缺少2参数重载。.NET标准版本中还缺少少量其他方法:SkipLast()、TakeLast()和ToHashSet()。为什么这些方法,特别是Zip()的重载从.NET标准中被省略了?

.NET标准是一个公共库,它同时受.NET Framework和.NET Core的支持

Enumerable.Zip
在.NET Framework中只有一个重载,事实上,第二个重载仅在.NET Core 3.0中引入


Microsoft不再主动更新.NET Framework,因此存在差异。

.NET标准是一个公共库,受.NET Framework和.NET Core的支持

Enumerable.Zip
在.NET Framework中只有一个重载,事实上,第二个重载仅在.NET Core 3.0中引入


Microsoft不再主动更新.NET Framework,因此存在差异。

如果您希望在类库.NET Standard,C#中使用此功能,请使用以下代码。您需要定义结果选择器“
Func
一个函数,用于指定如何合并两个序列中的元素。”

var number=新列表{1,2,3};
var chars=新列表{'a','b','c'};
foreach(Enumerable.Zip中的var(n,c)(数字,字符,(n,c)=>(n,c)))
{
Console.WriteLine($“{n},{c}”);
}

如果您希望在类库、.NET Standard、C#中使用此代码,那么以下代码就是您需要的代码。您需要定义结果选择器“
Func
一个函数,用于指定如何合并两个序列中的元素。”

var number=新列表{1,2,3};
var chars=新列表{'a','b','c'};
foreach(Enumerable.Zip中的var(n,c)(数字,字符,(n,c)=>(n,c)))
{
Console.WriteLine($“{n},{c}”);
}

可能它们存在于某个github项目中。我担心,这个问题是离题的,因为这里的大多数人(我指的是几乎所有人)都无法客观地回答“微软的相关团队在思考什么时候……”之类的问题,除非碰巧引起相关开发团队的注意(并非前所未闻,但这并不能使此类问题成为一般性的话题)因此,它本质上是在征求关于为什么std和CORE之间存在差异的意见。在我看来,如果没有客观的原因,那么你可以回答这个问题,这将是一个答案。有时,对“为什么x是这样”形式的问题的答案是“没有理由”;这并不意味着这个问题有错,事实上事情的方式是任意的,这是一种信息。我认为这个问题是“就为什么会有差异征求意见”;为了做到这一点,我必须首先意识到差异是任意的,而我不是。也许它们存在于某个github项目中。我担心,这个问题离题了,因为这里的大多数人(我指的是几乎所有人)都无法客观地回答这类问题“微软的相关团队当时在想什么……”除非它偶然引起了相关开发团队的注意(并非闻所未闻,但它并没有将此类问题概括为主题)因此,它本质上是在征求关于为什么std和CORE之间存在差异的意见。在我看来,如果没有客观的原因来解释它缺失的原因,那么你可以回答这个问题,这就是一个答案。有时候,对“为什么x是这样”形式的问题的答案是“没有理由”“这并不意味着这个问题有错,事实上事情的方式是任意的,这是一种信息。我质疑这个问题是“就为什么会有差异征求意见”,为了让我这样做,我本应该这样做。”
var numbers = new List<int> { 1, 2, 3 };
var chars = new List<char> { 'a', 'b', 'c' };

foreach (var (n,c) in Enumerable.Zip(numbers, chars, (n, c) => (n, c)))
{
    Console.WriteLine($"{n}, {c}");
}