Uruchomiłem StyleCop na moim kodzie i jedną z rekomendacji SA1122 jest użycie łańcucha. Puste zamiast "" przy przypisywaniu pustego łańcucha do wartości.
Moje pytanie brzmi: dlaczego jest to uważana za najlepszą praktykę. Czy jest to uważane za najlepszą praktykę? Zakładam, że nie ma różnicy między kompilatorami między tymi dwoma stwierdzeniami, więc mogę tylko myśleć, że to kwestia czytelności?
""
ale niestring.Empty
Odpowiedzi:
Jednym z ważnych powodów jest to, że wyjaśnia, że nie jest to literówka ani symbol zastępczy, że naprawdę chciałeś tutaj użyć pustego ciągu.
Nie wiem, czy uważa się to za „najlepszą praktykę”.
źródło
Wyobrażam sobie, że istnieją dwa powody, jeden dla czytelności i dwa dla niewielkiego zwiększenia wydajności.
Czytelność jest łatwa: wykrywanie jest znacznie szybsze
string.Empty
niż""
. Wyszukiwaniestring.Empty
jest również na ogół łatwiejsze i może bardziej dokładne niż szukanie literału. Wyjaśnia także intencję: nie popełniłeś literówki ani nie zapomniałeś czegoś skończyć, naprawdę chciałeś pusty ciąg.Przyczyną wydajności jest internowanie . Widzicie, środowisko wykonawcze przechowuje tabelę poprzednio używanych ciągów, dzięki czemu może szybko dokonywać porównań ciągów bez przeprowadzania kontroli znak po znaku.
string.Empty
jest już wewnętrznym odniesieniem do tego,""
że podczas pisania literał może nie dać ci wersji wewnętrznej, powodując w ten sposób niewielki spadek wydajności.źródło
string.Empty
wygrywa w naprawdę narożnej sprawie, która może prowadzić do jakiegoś magicznego błędu i naprawdę trudnego do debugowania:Jeśli jest spacja o zerowej szerokości w
""
.źródło
Według niektórych dokumentów, które znalazłem, ma to związek z tym, co emituje kompilator.
Szybkie wyszukiwanie ujawnia: http://stylecop.soyuz5.com/SA1122.html
Dlaczego jest złożony w „Regułach czytelności” z tym opisem, jest zagadkowy.
źródło