在创建部分命名 class 后,编译器无法识别系统 class 的原始方法

Compiler does not recognize original methods of system class after creating a partial of named class

我创建了这个,一个简短的函数,应该描述我的问题:

namespace System
{
    public abstract partial class Array
    {
        public static TElement[] Single<TElement>(TElement element)
        {
            return new[] { element };
        }
    }
}

我遇到的问题是,现在我的解决方案无法识别数组的原始函数和方法 class。

示例:Array.IndexOf(elements, element)

我通过 IDE 检查了可见的源代码,其中数组 class 确实有一个 partial 关键字:

namespace System
{
    [Serializable]
    [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
    public abstract partial class Array : ICloneable, IList, IStructuralComparable, IStructuralEquatable
    {
    }
}

我有点困惑,因为按照我的逻辑这应该可行。

但是

我还检查了 Microsoft documentation page 中的数组 class,其中缺少 partial 关键字。

我做错了什么,我该如何解决?
这是文档问题吗?数组 class 实际上不是部分的?

部分 classes 不是那样工作的。您不能向不同程序集中的现有 class 添加位。

部分 classes 允许将项目中单个类型的源代码拆分到多个源文件中。他们不允许类型本身在程序集之间拆分。

文档显示 partial 关键字没有意义,因为它是一个 实现 细节。到代码编译时,使用 partial 实现的类型与在一个源文件中具有所有相同代码的类型之间基本上没有区别。

听起来您真正想要的是某种“静态扩展”——我相信这已被视为 C# 的一个特性,但我不知道它是否是实际上很快就会来。

你不能做你想做的事。 'partial' 类 允许您将源代码拆分为多个文件。您没有 System.Array.

的来源

您最终得到的是一种名为 System.Array 的东西,它取代了标准的东西。因此所有其他方法的'loss'

您正在寻找的是扩展方法,如果这就是您想要做的。即向 Array 对象添加新函数。正如 JOn Skeet 指出的那样,您似乎正在尝试向 System.Array 添加新的静态方法,扩展无法做到这一点;只有实例方法