2012-01-17 55 views
0

在VB.NET中,我有一個名爲ArrayExtensions的靜態類,其中包含靜態函數,如Join(Of T)(ParamArray arrays As T()()) As T()。他們在一個模塊。我不需要包含模塊;我只需在項目中輸入Join(array1, array2, array3)即可。我可以在C#中包含一個靜態類,所以我不必輸入類名來使用它的靜態函數嗎?

現在我正在試用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()。編譯器能否確定大括號是否包含語句或數組項?令人失望。

+3

您可以改爲使用擴展方法:http://msdn.microsoft.com/zh-cn/library/bb383977。aspx – 2012-01-17 13:31:58

回答

4

有沒有什麼辦法可以在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(... 

這是一個「不錯的,但完全沒有必要」功能的一個很好的例子。它從來沒有足夠的吸引力足以讓名單實現足夠高。我們有一個「很好,但完全沒有必要」的特徵,比你的手臂長得多,我們不能在任何發行版上實現它們中的幾個,對不起!

0

做類似工作的標準方法是製作一個擴展方法,如下所示。包含「使用語句」的類是不可能的。

製作一個像這樣的方法。

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

所以,你要進入一個隨機的方法名,並希望編譯器通過所有課程在所有已知的命名空間(即正在「using'ed」的所有命名空間)搜索與該名稱的方法?爲什麼?

你可以用它創建一個擴展方法,這樣你就可以調用array1.Join(array2)

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

因爲我習慣VB.NET中的這個特性並且理解如何利用它。現在我錯過了它在C#中。 – jnm2 2012-01-17 13:46:26

+0

我不喜歡這件事的唯一情況是我必須把第一個數組放在一個語法上非常不同的地方。它可以工作,但不是很好。 – jnm2 2012-01-17 13:47:04

+0

@ jnm2我明白你錯過了它,但是如果有一個參數可以提供的話:我也在Delphi中遇到了這個,它也沒有幫助調試。如果你看到一種方法被這樣調用,那麼在你遵循它之前,你不會知道哪一個被調用。它可能在當前類中,在當前文件的另一個類中,或者在任何名稱空間中的任何類(只要它正被使用/導入)中(並且這就是樂趣開始的地方)。增加一點更多的冗長度確實有助於以後閱讀代碼。 – CodeCaster 2012-01-17 13:54:48

0

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); 
+0

'聯盟'拋棄重複,所以我不想在這裏。但也許我會按照前面的例子去做。 – jnm2 2012-01-17 13:53:58

相關問題