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