Bir dize nesnesine atarken neden string.Empty'yi "" üzerinde kullan


14

Benim kod üzerinde StyleCop çalıştırıyorum ve SA1122 önerilerinden biri bir değere boş bir dize atarken "" yerine string.Empty kullanmaktır.

Benim sorum, bunun neden en iyi uygulama olduğu düşünülüyor. Yoksa bu en iyi uygulama olarak mı görülüyor? Ben sadece bir okunabilirlik şey olduğunu düşünüyorum böylece iki ifade arasında derleyici farkı olduğunu varsayalım?

SO soru-cevap

Jon Skeet soruya cevap


5
Bu istendi ve Stack Overflow - cevap eminim ama bulmakta sorun yaşıyorum. O için yeni bir dize nesne örneğini oluşturmak için sahip olduğu gerçeği ile ilgili olduğunu ""ancakstring.Empty
ChrisF

@ChrisF Ahh, bu tür bir soru için yığın taşmasına bakmayı düşünmemiştim. Bir gander yapacağım.
dreza

1
stackoverflow ile ilgili soru tekrar: stackoverflow.com/questions/151472/…
quentin-starin

@ChrisF - SO sorulmuştur. Aşırı ve üzerinde ve üzerinde ...
Oded

1
İşte başlıyoruz - stackoverflow.com/questions/151472/… - Eylül 2008'den itibaren.
ChrisF

Yanıtlar:


12

Geçerli bir neden, bunun gerçekten bir yazım hatası veya yer tutucu olmadığını, gerçekten boş dizeyi burada kullanmak istediğinizi açıkça ortaya koymasıdır .

"En iyi uygulama" olarak kabul edilip edilmediğini bilmiyorum.


7

Biri okunabilirlik için iki, küçük bir performans artışı için iki neden olduğunu hayal edebiliyorum.

Okunabilirlik kolaydır: bunun çok hızlı noktaya bulunuyor string.Emptyden "". Arama yapmak string.Emptyaynı zamanda gerçek kelimeyi aramaktan daha kolay ve belki de daha doğru olacaktır. Ayrıca amacı açıklığa kavuşturuyor: sadece bir yazım hatası yapmadınız veya bir şeyi bitirmeyi unutmadınız, gerçekten boş bir dize istediniz.

Performans nedeni stajyerliktir . Gördüğünüz gibi, çalışma zamanı daha önce kullanılan dizelerin bir tablosunu tutar, böylece karakter karakter kontrolü yapmadan hızlı bir şekilde dize karşılaştırmaları yapabilir. string.EmptyZaten bir Interned referanstır ""nerede-olarak böylece hafif bir performans isabet neden size Interned versiyonunu vermeyebilir literal yazarak.


7
"" harfini yazarken bir nitpick, en azından .Net 2 ve üzeri sürümlerden beri size her zaman "" ile aynı dahili sürümü verecektir.
quentin-starin

Doğru, MSDN'deki interning makalesini takip etmek biraz zor. "" Ve string gibi görünüyor. Boş her ikisi de aynı interned dize işaret etmelidir, ancak .net çalışma zamanı sürümleri arasında bazı farklılıklar gösteriyor gibi görünüyor. Ben kod birden çok kez görünen herhangi bir dize hazır bilgi ikinci ve daha fazla kullanımda stajyer olacak, evet?
CodexArcanum

4
Ayrıca şunu vurgulamalıyım ki, hafif dediğimde süper minik demek istiyorum. "Performans nedeniyle" bir sunumdan diğerine geçmenin bir nedeni değildir, çalışma zamanı hakkında bilinmeye değer bir şeydir.
CodexArcanum

4
Ayrıca, performans yönünün sadece derleme için geçerli olduğuna dikkat edilmelidir. Her ikisi de aynı IL'ye derlendiğinden, çalışma zamanı performansı aynı olmalıdır.
lzcd

bu performans artışı sadece derleme olacak
cırcır ucube

4

string.Empty gerçekten büyülü bir hataya yol açabilecek ve hata ayıklaması gerçekten zor olan gerçekten köşe bir durumda kazanır:

Bir var ise sıfır genişliği alanı içinde "".


0

Bulduğum bazı belgelere göre, derleyici tarafından yayılanlarla ilgilidir.

Hızlı bir arama şunu gösterir: http://stylecop.soyuz5.com/SA1122.html

Neden "Okunabilirlik Kuralları" altında bu açıklama ile dosyalanır şaşırtıcı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.