2012-01-17 1 views
0

VB.NETには、静的関数、例えばJoin(Of T)(ParamArray arrays As T()()) As T()を含むArrayExtensionsという静的クラスがありました。彼らはモジュールにいました。私はモジュールを含める必要はありませんでした。私はちょうどJoin(array1, array2, array3)プロジェクトの他のクラスから入力することができます。静的関数を使用するためにクラス名を入力する必要がないので、静的クラスをC#に含めることはできますか?

私はC#を試しています。私は同じ静的関数T[] Join<T>(params T[][] arrays)を静的クラスArrayExtensionsに持っています。私はいつもArrayExtensions.Join(array1, array2, array3)を書くことを避けて脱出する方法を見つけることができないようです。 VB.NETと違って、私はusing ArrayExtensionsを試してみました。

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/en-us/library/bb383977aspx –

答えて

4
あなたはT [] []で

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

これはあなたがこれを行うようになるために拡張メソッドを使用することができます

C#でJoin(array1, array2, array3)と入力するだけの方法はありますか?

残念ながら、これはかなり頻繁に要求される機能です。これは、「持っているのはいいが、完全に不要な」機能の完璧な例である代わりに

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

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

:のような何かをできるようにするとよいでしょう。それは実際にそれが実装されるリスト上で十分に高くなるほど魅力的ではありませんでした。私たちにはあなたの腕よりも文字通り長持ちしている「いいが、まったく必要のない」機能のリストがあり、何らかのリリースでそれらを2つ以上実装することはできません、ごめんなさい!

0

同様のことを行う標準的な方法は、以下のような拡張メソッドを作成することです。 "usingステートメント"を含むクラスを含めることはできません。

このような方法を作成します。

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

+0

私がこれについて気に入らない唯一のことは、最初の配列を非常に構文的に異なる場所に配置する必要があることです。それは動作しますが、それはいいものではありません。 – jnm2

+0

@ jnm2私はあなたがそれを見逃していることを理解していますが、私は提供できる1つの議論がある場合:私はこれもDelphiで遭遇しましたが、デバッグを助けませんでした。メソッドがこのように呼び出されているのを見た場合、それを追跡するまで呼び出されているメソッドはわかりません。それは現在のクラス、現在のファイルの別のクラス(または、楽しいものが始まる場所)にあるかもしれません(使用/インポートされている限り)。もう少し冗長を追加することは、後でコードを読むのに役立ちます。 – CodeCaster

0

C#がモジュールをサポートしていません。私はこれがLINQのでサポートされていると思いますが、とにかく

array1.Join(array2, array3); 

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

'Union'は重複を破棄していますので、ここではそれを望みません。しかし、私は前の例と一緒に行くつもりです。 – jnm2

関連する問題