2009-11-05 19 views
6

Bir dizenin başına veri eklemek için sözdizimsel bir şeker var mı?+ = önekleme için + = eşdeğeri

+2

Sadece = argümanları tersine çevrilmiş olarak arayamaz mısınız? C# ile aşina değilim ama bu Java'da çalışırdı. – I82Much

+1

, ilk dizgiyi ikinciye ekler; Sonuç aynı dizgedir, ancak yanlış değişkeni –

+0

@ l82Much: Kesinlikle şöyle bir şey yapmalısınız: s = "Prepend" + = s; – Lazarus

cevap

20

Hemen kullanın:

x = "prefix" + x; 

yapar hiçbir bileşik atama operatörü var.

+0

Teşekkürler Jon (Tony). Aşağıdaki yorumlarınızı da dikkate aldım. –

17
sorry = "nope, " + sorry; 
0

Bunlar herhangi bir birleştirme operatörü kullanmak zorunda kalmadan, ipler birleştirmek için kullanılabilir FCL gelen yöntemlerdir. + Ve + = operatörleri, dizeleri ve oluşturulan geçici dizeleri nedeniyle tekrar tekrar çağrıldığında (yani bir döngü) çok fazla bellek kullanmaya eğilimlidir. (Düzenleme: Açıklamalarda belirtildiği gibi, String.Format genellikle verimli bir çözüm değildir)

Daha çok sözdizimsel bir alternatif şekerden daha çok.

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

^String.Format at MSDN.

Düzenleme: Sadece iki için dizeleri: String.Concat üzerine

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

^Daha fazla bilgi.

public static class StringExtensions{ 

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

} 

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

O yine değil sözdizimsel şeker, ama kolay:

+0

String.Format öğesini tekrar tekrar kullanmak aynı derecede sorunlu olur. String.Concat kullanımı String.Format kullanarak dizeleri birleştirmek için daha etkilidir. Bir döngüde birleştirme, String.Format değil, bir StringBuilder kullanılarak daha iyi olabilir. –

+1

String.Format kullanarak bu yöntem çok verimsiz. CPU kullanımı çok daha kötü ve aynı zamanda RAM'i de boşa harcıyor. String.Concat yerine: string string = String.Concat ("prefix", "main string", "last string"). Ayrıca, String.Concat'ı bir döngüde oluşturduğunuz bir dize [] iletebilirsiniz (örneğin, Listesini, sonra ToArray() öğesini oluşturabilirsiniz). Bu, sonuçta ortaya çıkan dizgiyi saklamak için yalnızca gereken alanı ayırdığı için en az bellek kullanımıyla sonuçlanır. Hem "+" hem de String.Format, ortalama olarak ihtiyaç duyulandan yaklaşık% 30 daha fazla RAM ayırır. Bu sadece büyük iplerle uğraşırken önemlidir. –

+0

Teşekkürler çocuklar. Çok yararlı. –

7

Hep bir uzantısı yöntem yazabilirsiniz. Önceden önerilmiş olandan daha basit olmamakla birlikte.

7

Orada C# hiçbir = + operatörü, ama neyse ki OO burada kurtarmaya gelir: string.Insert hakkında daha fazla bilgi için

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

: http://msdn.microsoft.com/en-us/library/system.string.insert.aspx

ben kabul edeceğini a = b + Burada en mantıklı cevap görünüyor. String.Insert'i kullanmaktan çok daha iyi okur.

+0

Şerefe Nick. Sonunda String.Concat yöntemiyle gitmeye karar verdim. –