2009-11-05 8 views
6

¿Hay un poco de azúcar sintáctica para el prefijo de los datos al comienzo de una cadena de forma similar a cómo + = se agrega a una cadena?Equivalente a + = para el prefijo

+2

¿No puede simplemente llamar a + = con los argumentos invertidos? No estoy familiarizado con C# pero eso funcionaría en Java. – I82Much

+1

que publicaría anexar la primera cadena al segundo, no prefijar la segunda cadena en primer plano de la primera. El resultado sería la misma cadena, pero en la variable incorrecta –

+0

@ l82Much: Seguramente tendría que hacer algo como: s = "Prefijo" + = s; – Lazarus

Respuesta

20

sólo tiene que utilizar:

x = "prefix" + x; 

No hay operador de asignación compuesto que hace esto.

+0

Gracias Jon (Tony). He tomado en cuenta tus comentarios a continuación también. –

17
sorry = "nope, " + sorry; 
0

Éstos son los métodos de la FCL que pueden ser utilizados para combinar las cadenas, sin tener que utilizar cualquier operador de concatenación. Los operadores + y + = son propensos a utilizar mucha memoria cuando se les llama repetidamente (es decir, un bucle) debido a la naturaleza de las cadenas y cadenas temporales creadas. (Edit: Como se señala en los comentarios, String.Format a menudo no es una solución eficiente tampoco)

Es más una alternativa sintáctica que el azúcar.

string full = String.Format("{0}{1}{2}", "prefix", "main string", "last string"); 

^Más información sobre String.Format at MSDN.

Editar: sólo para dos cadenas:

string result = string.Concat("prefix", "last part"); 

^Más información sobre String.Concat.

+0

Usar String.Format repetidamente sería tan problemático. Usar String.Concat es más eficiente que usar String.Format, solo para concatenar cadenas. La concatenación en un bucle es probable que sea mejor usando un StringBuilder, no un String.Format. –

+1

Usar String.Format de esta manera es muy ineficiente. El uso de la CPU es mucho peor, y también desperdicia RAM. Desea String.Concat en su lugar: string full = String.Concat ("prefix", "main string", "last string"). También puede pasar a String.Concat una cadena [] que haya creado en un bucle (por ejemplo, puede compilar una lista , y luego ToArray()). Esto resulta en el menor uso de memoria de todos porque asigna solo el espacio necesario para almacenar la cadena resultante. Tanto "+" como String.Format en promedio asignan aproximadamente 30% más de RAM de lo necesario. Esto es importante solo cuando se trata de cadenas grandes. –

+0

Gracias chicos. Muy útil. –

7

Siempre se puede escribir un método de extensión:

public static class StringExtensions{ 

    public static string Prefix(this string str, string prefix){ 
     return prefix + str; 
    } 

} 

var newString = "Bean".Prefix("Mr. "); 

No es el azúcar sintáctica, pero fácil, no obstante. Aunque en realidad no es más simple de lo que ya se ha sugerido.

7

No hay = + operador en C#, pero por suerte OO viene al rescate aquí:

string value = "Jamie"; 
value = value.Insert(0, "Hi "); 

Para obtener más información sobre String.Insert: http://msdn.microsoft.com/en-us/library/system.string.insert.aspx

estoy de acuerdo que a = b + a parece la respuesta más sensata aquí. Se lee mucho mejor que usar una cuerda. Inserte eso con seguridad.

+0

Cheers Nick. Decidí ir con el método String.Concat al final. –

Cuestiones relacionadas