web-dev-qa-db-ja.com

StringのようなC#組み込み型を拡張する方法は?

皆さん、ご挨拶... Trim a Stringが必要です。しかし、文字列自体の末尾または先頭だけでなく、文字列自体内のすべての繰り返し空白を削除したいです。私は次のような方法でそれを行うことができます:

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

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

前もって感謝します。

80
Girardi

String.Trim()を拡張できないため。 here で説明されているように、空白を削除して削減する拡張メソッドを作成できます。

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+", " ");
        }
    }
}

次のように使用できます

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!";
147
JoeyRobichaud

出来ますか?はい、ただし拡張方法のみ

クラス 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();
22
Henk Holterman

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

はい、拡張メソッドを使用して既存のタイプを拡張できます。拡張メソッドは、当然、型のパブリックインターフェイスにのみアクセスできます。

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

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

いいえ、このメソッドTrim()を呼び出すことはできません。拡張メソッドはオーバーロードに関与しません。コンパイラは、これについて詳しく説明するエラーメッセージを提供する必要があると思います。

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

10
Arne

拡張メソッド!

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

拡張メソッドを使用するだけでなく、ここでは適切な候補となる可能性がありますが、オブジェクトを「ラップ」することも可能です(例:「オブジェクト構成」)。ラップされたフォームにラップされているものより多くの情報が含まれていない限り、ラップされたアイテムは、情報を失うことなく暗黙的または明示的な変換をすっきりと受け渡すことができます。

ハッピーコーディング。

2
user166390