Sólo estoy curoius ¿cómo funciona .ToUpper()? ¿Hay algún tipo de mapeo que tenga un código UTF XYZ más bajo y el código UTF XYZ1 superior?¿Cómo funciona .ToUpper()?
Respuesta
Sí, se trata de hacer uso de los metadatos Unicode. Cada carácter (punto de código Unicode) tiene un caso, así como mapeo de casos a mayúsculas y minúsculas (y caso del título). .NET usa esta información para convertir una cadena a mayúsculas o minúsculas. Puede encontrar la misma información en el Unicode Character Database.
String.ToUpper solo usa CurrentCulture
en el núcleo.
desensamblado versión de String.ToUpper()
de mscorelib.dll
, se puede ver esto:
public string ToUpper(CultureInfo culture)
{
if (culture == null)
{
throw new ArgumentNullException("culture");
}
return culture.TextInfo.ToUpper(this);
}
Por lo tanto, depende de su actual cultura. Siempre hay una sobrecarga adecuada donde se puede especificar cultura alternativa.
EDITAR
Internamente se llama nativeChangeCaseString
función al final con su implementación nativa. Cómo se implementa internamente, no tengo idea, porque es algo que puede ser respondido por la persona que lo desarrolló.
Como sugiere @Tim agregar un enlace a
TextInfo.ToUpper que proporciona algo más de información sobre el tema.
No estoy seguro de que realmente responda la pregunta sin embargo. Diciendo "llama a este método internamente" sin información sobre lo que hace ese método. –
@GeorgeDuckett: edité mi publicación, pero como le escribí a ** la implementación ** concreta, puede ser respondida por la persona que desarrolló esa función. – Tigran
@Tigran: Es posible que desee agregar el enlace a ['TextInfo.ToUpper'] (http://msdn.microsoft.com/en-us/library/fsc2y169) ya que hay más información, por ejemplo, que la devuelta la cadena puede diferir en longitud de la cadena de entrada lo que demuestra que el enfoque de mapeo de OP es incorrecto. –
Esto se ha preguntado antes (de forma general) en StackOverflow. De acuerdo, no se trata de C# o .NET, sino que responde a la parte Unicode de esta pregunta.
Si usted está interesado en aspectos de diseño de ToUpper() la aplicación a continuación, puede hacer referencia a las secciones siguientes:
- peso mosca patrón de diseño de la banda de los cuatro catálogo de patrones de diseño se utiliza para manejar la funcionalidad relacionada con carácter
- Según este patrón de diseño, cada unidad de la colección está diseñada como un objeto que tiene un comportamiento definido, el objeto final es la colección de unidades más pequeñas
- En el caso de Cadena, la Cadena dada se maneja como una matriz de caracteres, donde cada personaje es un objeto con comportamiento definido
- Yendo con este patrón de diseño cuando llamamos a ToUpper(), itera sobre los caracteres de cadena y delega internamente la llamada a cada carácter. Durante la llamada ToUpper en el carácter, clase String también pasa referencia de configuración regional que contiene datos de caracteres y codificación
Si usted está interesado en la implementación real, entonces usted puede hacer referencia a la implementación de código abierto de la clase java.lang.String parte del lenguaje Java - esto es equivalente a la clase de utilidad de cadena C#.
Los siguientes son los enlaces donde se puede encontrar el código fuente de la clase java.lang.String: hay 2 métodos sobrecargados: toUpper() y toUpper (Locale).internamente toUpper() llama a Upper (Locale) con la configuración regional predeterminada, por lo que le interesará el segundo método.
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java
Esperamos que esta información ayuda.
- 1. linq case insensitive (sin toUpper or toLower)
- 2. En C# ¿cuál es la diferencia entre ToUpper() y ToUpperInvariant()?
- 3. ¿Cómo funciona este "retraso" funciona
- 4. ¿Cómo funciona Arrays.asList (...). Contiene (...) funciona?
- 5. ¿Cómo funciona OfType <T>() ¿Funciona?
- 6. ¿cómo funciona {} mientras (0) funciona en macro?
- 7. ¿Cómo funciona `if (Test-Path ...)` realmente funciona?
- 8. ¿Cómo funciona exactamente si ($ variable) funciona?
- 9. Scrapy BaseSpider: ¿Cómo funciona?
- 10. ¿Cómo funciona Drupal?
- 11. ¿Cómo funciona cellForRowAtIndexPath?
- 12. ¿Cómo funciona printf?
- 13. ¿Cómo funciona Disqus?
- 14. ¿Cómo funciona python's random.Random.seed?
- 15. ¿Cómo funciona header()?
- 16. memory_limit: ¿Cómo funciona?
- 17. ¿Cómo funciona jdbc?
- 18. ¿Cómo funciona Dropbox?
- 19. ¿Cómo funciona Langage.Haskell.TH.report?
- 20. Cómo funciona QRectF :: adjusted()
- 21. ¿Cómo funciona Google Talk?
- 22. ¿Cómo funciona <: <?
- 23. ¿Cómo funciona PyArg_ParseTupleAndKeywords?
- 24. ¿Cómo funciona Excel VSTO?
- 25. ¿Cómo funciona Request.IsAuthenticated?
- 26. ¿Cómo funciona array_diff?
- 27. ¿Cómo funciona un ActionListener?
- 28. ¿Cómo funciona Pex?
- 29. ¿Cómo funciona nohup?
- 30. ¿Cómo funciona .insert?
Es posible que pueda utilizar [ILSpy] (http://wiki.sharpdevelop.net/ILSpy.ashx) o similar para averiguarlo. –
Esta pregunta http://stackoverflow.com/questions/297703/how-do-you-set-strings-to-uppercase-lowercase-in-unicode parece relacionada –
Eventualmente se asigna a InternalChangeCaseString que no es visible para ILSPY – Chriseyre2000