我可以在C#中包含一个静态类吗;不必键入类名就可以使用它的静态函数

本文关键字:可以使 静态函数 不必 包含一 静态类 我可以 | 更新日期: 2023-09-27 18:20:27

在VB.NET中,我有一个名为ArrayExtensions的静态类,它包含像Join(Of T)(ParamArray arrays As T()()) As T()这样的静态函数。他们在一个模块里。我不需要包括模块;我可以从项目中的任何其他类中键入Join(array1, array2, array3)

现在我正在试用C#,在静态类ArrayExtensions中有相同的静态函数T[] Join<T>(params T[][] arrays)。我似乎不知道如何避免每次都要写ArrayExtensions.Join(array1, array2, array3)。我尝试了using ArrayExtensions,但它不起作用,不像VB.NET.

有什么方法可以让我在C#中键入Join(array1, array2, array3)吗?

我讨论过将其更改为T[] Join<T>(this T[][] arrays)并使用{array1, array2}.Join(),结果发现与VB.NET C#不同,它迫使我编写new [] {array1, array2}.Join()。编译器不能弄清楚大括号是包含语句还是数组项吗?令人失望的

我可以在C#中包含一个静态类吗;不必键入类名就可以使用它的静态函数

有什么方法可以让我在C#中键入Join(array1, array2, array3)吗?

不幸的是,没有。这是一个经常被要求的功能。如果能做这样的事情就太好了:

using System; // the namespace
using System.Math; // the type
    ...
    x = Sin(Abs(Max(...

而不是

    x = Math.Sin(Math.Abs(Math.Max(...

这是一个完美的例子,说明了"拥有很好,但完全没有必要"的功能。它从来没有足够的吸引力,以至于它在要实施的清单上排名足够靠前。我们有一个"很好,但完全不必要"的功能列表,这些功能实际上比你的手臂还长,而且我们在任何版本中都无法实现超过几个,对不起!

所以您想输入一个随机方法名称,并希望编译器在所有已知名称空间(即所有正在"使用"的名称空间)中的所有类中搜索具有该名称的方法?为什么?

您可以从中创建一个扩展方法,因此可以调用array1.Join(array2):

T[] Join<T>(this T[][] array1, T[][] array2)

做类似事情的标准方法是制作一个类似下面的扩展方法。不可能包含带有"using语句"的类。

制作这样的方法。

public static class ArrayExtensions
{
   public static Array MyOwnArrayJoin(this Array array1, Array array2)
   {
       //Do the Join and return Array
   }
}

C#不支持模块。您可以使用T[][]的扩展方法

public static class ArrayExtension 
{
    public static T[] Join<T>(this T[][] self, params T[][] arrays)
    {
        ...
    }
}

这会让你这样做:

array1.Join( array2, array3 );

无论如何,我认为这是由Linq:支持的

array1.Union(array2).Union(array3);