tutorial new métodos metodos initialize initial clase .net stringbuilder

.net - new - stringbuilder initialize



¿Por qué StringBuilder no tiene el método IndexOf? (3)

Entiendo que puedo llamar a ToString (). IndexOf (...), pero no quiero crear una cadena adicional. Entiendo que puedo escribir una rutina de búsqueda manualmente. Me pregunto por qué una rutina así no existe en el marco.


Desafortunadamente, muchos de los métodos implementados para String podrían haberse implementado para StringBuilder, pero eso no se hizo. Considera usar métodos de extensión para agregar lo que te importa.


Llamar a ToString() en un StringBuilder no crea un objeto adicional, confusamente. Internamente, StringBuilder almacena un objeto String, para el rendimiento; llamando a ToString() simplemente devuelve ese objeto.


Sé que esta es una pregunta antigua, sin embargo, he escrito un método de extensión que realiza un IndexOf en un StringBuilder . Está abajo. Espero que ayude a cualquiera que encuentre esta pregunta, ya sea en una búsqueda de Google o en una búsqueda de .

/// <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; }