To mogło być wcześniej zadawane, ale nie mogę znaleźć takich wpisów. Czy istnieje klasa do pracy ze stringami ASCII? Korzyści są liczne:Szybka i wydajna pamięć klasy ASCII dla .NET
- Porównanie powinno być szybsze od jej tylko bajt-do-bajta (zamiast UTF-8 ze zmiennym kodowaniu)
- pamięci skuteczny, należy użyć około połowy pamięci w dużych ciągów
- Szybsze wersje ToUpper()/tolower(), które używają Look-Up-Table, który jest językiem niezmienna
Jon Skeet napisał podstawową AsciiString implementation i udowodnił # 2, ale zastanawiam się, czy ktoś wziął to dalej i ukończyli taką klasę. Jestem pewien, że byłyby zastosowania, chociaż nikt zwykle nie wybierałby takiej trasy, ponieważ wszystkie istniejące funkcje String musiałyby zostać ponownie zaimplementowane ręcznie. A konwersje między Stringami będą rozrzucone wszędzie, komplikując prosty program.
Czy istnieje taka klasa? Gdzie?
Kilka uwag: Ciąg .NET używa wewnętrznie UTF-16 i można znacznie przyspieszyć porównanie za pomocą [String.Compare] (http://msdn.microsoft.com/en-us/ library/e6883c06.aspx), które pobiera parametr [StringComparison] (http://msdn.microsoft.com/en-us/library/system.stringcomparison.aspx) i ustawia go na wartość porządkową. – Dirk
Zwykłe porównanie wykorzystuje bezpośrednio wartości całkowite kodowania UTF-16. Nie bierze pod uwagę aktualnej kultury ani tego, czy ten sam symbol znaku może być opisany przez więcej niż jeden kodowy kod Unicode. Porównanie tych normalnie zwraca wartość true, ale wartość false, gdy używana jest liczba porządkowa. – Dirk
Tak, niektóre inne funkcje ciągów również pobierają parametr StringComparison, w tym [String.IndexOf] (http://msdn.microsoft.com/en-us/library/system.string.indexof.aspx). – Dirk