Sono solo curioso come funziona .ToUpper()? Esiste una sorta di mappatura che più bassa ha il codice UTF XYZ e quello superiore ha il codice UTF XYZ1?Come funziona .ToUpper()?
risposta
Sì, è facendo uso dei metadati Unicode. Ogni carattere (punto di codice Unicode) ha un caso e la mappatura del caso in maiuscolo e minuscolo (e titolo). .NET utilizza queste informazioni per convertire una stringa in maiuscolo o minuscolo. È possibile trovare le stesse informazioni nello Unicode Character Database.
String.ToUpper utilizza solo lo CurrentCulture
nel core.
smontate versione di String.ToUpper()
da mscorelib.dll
, si può vedere questo:
public string ToUpper(CultureInfo culture)
{
if (culture == null)
{
throw new ArgumentNullException("culture");
}
return culture.TextInfo.ToUpper(this);
}
Quindi dipende dal vostro corrente cultura. C'è sempre un sovraccarico adatto in cui è possibile specificare una cultura alternativa.
EDIT
Internamente chiama nativeChangeCaseString
funzione alla fine con la sua nativo attuazione. Come viene implementato internamente, non ne ho idea, perché è qualcosa che può essere risolto da chi lo ha sviluppato.
Come suggerito da @ Tim aggiungere un link a
TextInfo.ToUpper che fornisce qualche informazione in più sul soggetto.
Non sono sicuro che risponda davvero alla domanda. Dire "chiama questo metodo internamente" senza informazioni su cosa faccia quel metodo. –
@GeorgeDuckett: ho modificato il mio post, ma come ho scritto per ** concreto ** l'implementazione può essere risolta dalla persona che ha sviluppato quella fazione. – Tigran
@Tigran: è possibile aggiungere il collegamento a ['TextInfo.ToUpper'] (http://msdn.microsoft.com/en-us/library/fsc2y169) poiché ci sono ulteriori informazioni, ad esempio che il reso la stringa potrebbe differire in lunghezza dalla stringa di input, il che dimostra che l'approccio di mappatura dell'OP non è corretto. –
Questo è stato chiesto prima (in modo approssimativo) su StackOverflow. Certo, non si tratta di C# o .NET, ma risponde alla parte Unicode di questa domanda.
Se siete interessati agli aspetti di progettazione di ToUpper() implementazione poi si può fare riferimento alle seguenti sezioni:
- peso mosca modello di progettazione dalla Banda dei Quattro catalogo design pattern viene utilizzato per gestire carattere funzionalità relative
- In base a questo modello di progettazione, ciascuna unità della collezione è progettata come un oggetto che ha un comportamento definito, l'oggetto finale è una raccolta di unità più piccole
- Nel caso di String, la stringa data viene effettivamente gestita come matrice di caratteri, dove ciascuno il carattere è un oggetto con comportamento definito
- Con questo modello di progettazione, quando chiamiamo ToUpper(), itera sopra i caratteri della stringa e delega internamente la chiamata a ciascun carattere. Durante la chiamata ToUpper sul carattere, classe String passa anche riferimento Locale che contiene dettagli della mappa dei caratteri e la codifica
Se siete interessati a concreta attuazione, allora si può fare riferimento alla implementazione open source di classe java.lang.String parte del linguaggio Java - questo è equivalente alla classe di utilità stringa C#.
Di seguito sono riportati i collegamenti in cui è possibile trovare il codice sorgente della classe java.lang.String - ci sono 2 metodi sovraccaricati: toUpper() e toUpper (Locale).internamente toUpper() chiamaUser (Locale) con le impostazioni internazionali predefinite, quindi il secondo metodo sarà di tuo interesse.
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java
Spero che queste informazioni aiuta.
- 1. PowerShell ToUpper() nella stringa
- 2. C#: Confusione circa ToUpper() e ToLower()
- 3. Come implementare tolower() se si ottiene ToUpper() già
- 4. Perché putchar, toupper, tolower, ecc. Prendono un int invece di un char?
- 5. non definito simbolo “toupper” in MacPorts GCC 4.7 OS-X Mavericks 10,9 C11
- 6. Come funziona Angular $ q.quando funziona?
- 7. Come funziona! Stringa (enum.member) funziona?
- 8. Java non funziona come funziona?
- 9. scala - Come funziona method :: funziona in List?
- 10. Come funziona `if (Test-Path ...)` funziona davvero?
- 11. Come funziona questa funzione "ritardo" funziona
- 12. Come funziona davvero volatile?
- 13. Come funziona [UIAlertView show]?
- 14. Come funziona asp.net mvc?
- 15. Come funziona ReCAPTCHA?
- 16. Come funziona disqus?
- 17. Come funziona un ActionListener?
- 18. Come funziona il casting?
- 19. Come funziona array_diff?
- 20. ASP.NET Come funziona ViewState
- 21. Come funziona Lucene
- 22. Come funziona PHP - letteratura
- 23. JavaScript: come funziona Greasemonkey
- 24. come funziona presentPopoverFromRect?
- 25. Come funziona sched_setaffinity()?
- 26. come boost :: ~ shared_ptr funziona?
- 27. Come funziona Proxifier?
- 28. DirectX - Come funziona VertexBuffer?
- 29. Come funziona gcc `__thread`?
- 30. Come funziona dispatch_set_target_queue?
Potrebbe essere possibile utilizzare [ILSpy] (http://wiki.sharpdevelop.net/ILSpy.ashx) o simile per scoprirlo. –
Questa domanda http://stackoverflow.com/questions/297703/how-do-you-set-strings-to-uppercase-lowercase-in-unicode sembra correlata –
Si associa infine a InternalChangeCaseString che non è visibile a ILSPY – Chriseyre2000