我可以在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#中键入
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);