2011-02-05 16 views
69

ご挨拶皆様... TrimStringが必要です。しかし、私は、文字列内のすべての繰り返し空白を削除したいと思います。StringのようなC#の組み込み型を拡張するには?

public static string ConvertWhitespacesToSingleSpaces(string value) 
{ 
    value = Regex.Replace(value, @"\s+", " "); 
} 

私が得た方法は、hereです。しかし、私はこのコードをString.Trim()の中で呼びたいので、Trimメソッドを拡張またはオーバーロードまたはオーバーライドする必要があると思います。これを行う方法はありますか?

ありがとうございます。

答えて

118

string.Trim()を拡張することはできません。 hereのようにExtensionメソッドを作成すると、空白をトリミングして減らすことができます。ここではそう良い候補を - - 「ラップ」することも可能であるので、

using CustomExtensions; 

string text = " I'm wearing the cheese. It isn't wearing me! "; 
text = text.TrimAndReduce(); 

拡張メソッドを使用してだけでなく、あなたに

text = "I'm wearing the cheese. It isn't wearing me!"; 
+0

ファイルに特別な名前が必要ですか?またはこれをどこで保存しますか?それはUtilクラスなどに入れられますか? – testing

+1

@testingプロジェクトに参照されている限り、どこにでも置くことができます。特定の名前空間に入れる場合は、他のクラスと同じように 'using'ステートメントを使用してください。 – Twicetimes

+0

なぜTrimAndReduce関数から正規表現を返さなかったのですか?あなたの答えをもっと簡単に読むことができました。あなたがあなたの答えをそんなに使っていない限り、あなたはそれをどこか他の場所に呼び出す必要があります – quemeful

20

可能でしょうか?はい、ただし、拡張メソッドのみを使用します

クラスSystem.Stringは、オーバーライドまたは継承を使用できないようにシールされています。

public static class MyStringExtensions 
{ 
    public static string ConvertWhitespacesToSingleSpaces(this string value) 
    { 
    return Regex.Replace(value, @"\s+", " "); 
    } 
} 

// usage: 
string s = "test !"; 
s = s.ConvertWhitespacesToSingleSpaces(); 
+5

「String.Trim」が取るアクションを変更することはできません。 –

7

Extension methods!

public static class MyExtensions 
{ 
    public static string ConvertWhitespacesToSingleSpaces(this string value) 
    { 
     return Regex.Replace(value, @"\s+", " "); 
    } 
} 
9

あなたの質問にイエスとノーがあります。

はい、拡張メソッドを使用して既存のタイプを拡張できます。エクステンションメソッドは、当然、そのタイプのパブリックインターフェイスにしかアクセスできません。

public static string ConvertWhitespacesToSingleSpaces(this string value) {...} 

// some time later... 
"hello world".ConvertWhitespacesToSingleSpaces() 

いいえ、このメソッドをTrim()と呼ぶことはできません。拡張メソッドはオーバーロードに関与しません。私は、コンパイラは、あなたにこれを詳述するエラーメッセージを与えるべきだと思います。

拡張メソッドは、メソッドを定義する型を含む名前空間が使用されている場合にのみ表示されます。

2

を与えるようにあなたがそれを使用することができます

namespace CustomExtensions 
{ 
    //Extension methods must be defined in a static class 
    public static class StringExtension 
    { 
     // This is the extension method. 
     // The first parameter takes the "this" modifier 
     // and specifies the type for which the method is defined. 
     public static string TrimAndReduce(this string str) 
     { 
      return ConvertWhitespacesToSingleSpaces(str).Trim(); 
     } 

     public static string ConvertWhitespacesToSingleSpaces(this string value) 
     { 
      return Regex.Replace(value, @"\s+", " "); 
     } 
    } 
} 

オブジェクト(例えば、 "オブジェクト構成")。ラップされたフォームにラップされているものより多くの情報が含まれていない限り、ラップされたアイテムは情報の損失なしに暗黙的または明示的な変換をきれいに通過することができます。

ハッピーコーディング。

関連する問題