24

ToString().IndexOf(...) を呼び出すことができることは理解していますが、余分な文字列を作成したくありません。検索ルーチンを手動で記述できることを理解しています。そのようなルーチンがフレームワークにまだ存在しないのはなぜだろうか。

4

4 に答える 4

53

これは古い質問ですが、でを実行する拡張メソッドを作成しIndexOfましたStringBuilder。以下です。Google検索またはStackOverflowの検索のいずれかから、この質問を見つけた人に役立つことを願っています。

/// <summary>
/// Returns the index of the start of the contents in a StringBuilder
/// </summary>        
/// <param name="value">The string to find</param>
/// <param name="startIndex">The starting index.</param>
/// <param name="ignoreCase">if set to <c>true</c> it will ignore case</param>
/// <returns></returns>
public static int IndexOf(this StringBuilder sb, string value, int startIndex, bool ignoreCase)
{            
    int index;
    int length = value.Length;
    int maxSearchLength = (sb.Length - length) + 1;

    if (ignoreCase)
    {
        for (int i = startIndex; i < maxSearchLength; ++i)
        {
            if (Char.ToLower(sb[i]) == Char.ToLower(value[0]))
            {
                index = 1;
                while ((index < length) && (Char.ToLower(sb[i + index]) == Char.ToLower(value[index])))
                    ++index;

                if (index == length)
                    return i;
            }
        }

        return -1;
    }

    for (int i = startIndex; i < maxSearchLength; ++i)
    {
        if (sb[i] == value[0])
        {
            index = 1;
            while ((index < length) && (sb[i + index] == value[index]))
                ++index;

            if (index == length)
                return i;
        }
    }

    return -1;
}
于 2011-07-06T18:29:31.620 に答える
7

残念ながら、String 用に実装されたメソッドの多くは StringBuilder 用に実装できましたが、実装されていませんでした。拡張メソッドを使用して、関心のあるものを追加することを検討してください。

于 2009-08-31T23:57:33.333 に答える
-1

ToString()aを呼び出してもStringBuilder、紛らわしいことに、追加のオブジェクトは作成されません。内部的にStringBuilderは、パフォーマンスのために String オブジェクトを格納します。を呼び出すToString()と、単にそのオブジェクトが返されます。

于 2009-09-01T00:01:44.527 に答える