Что такое текстовый элемент в контексте System.Globalization.StringInfo
в C#?
Я знакомлюсь с понятием текстовых элементов, изучая C# через CLR через C#. И кажется, что читатель книги должен четко понимать, что такое текстовый элемент. Но я вообще не понимаю эту концепцию.
Кроме того, документация не очень многословна в топи c.
Я хотел бы узнать определение того, что представляет собой текстовый элемент.
Я предполагаю, что это просто символ Unicode, который необязательно представлен одним System.Char
(поскольку в некоторых случаях он может быть представлен двумя System.Char
: высокие и низкие суррогаты). Но я не уверен, что мое предположение верно.
Мое другое предположение состоит в том, что это целое слово.
Текстовые элементы упоминаются в этом фрагменте кода в CLR через C# книга:
using System;
using System.Text;
using System.Globalization;
using System.Windows.Forms;
public sealed class Program {
public static void Main() {
// The string below contains combining characters
String s = "a\u0304\u0308bc\u0327";
SubstringByTextElements(s);
EnumTextElements(s);
EnumTextElementIndexes(s);
}
private static void SubstringByTextElements(String s) {
String output = String.Empty;
StringInfo si = new StringInfo(s);
for (Int32 element = 0; element < si.LengthInTextElements; element++) {
output += String.Format(
"Text element {0} is '{1}'{2}",
element, si.SubstringByTextElements(element, 1),
Environment.NewLine);
}
MessageBox.Show(output, "Result of SubstringByTextElements");
}
private static void EnumTextElements(String s) {
String output = String.Empty;
TextElementEnumerator charEnum =
StringInfo.GetTextElementEnumerator(s);
while (charEnum.MoveNext()) {
output += String.Format(
"Character at index {0} is '{1}'{2}",
charEnum.ElementIndex, charEnum.GetTextElement(),
Environment.NewLine);
}
MessageBox.Show(output, "Result of GetTextElementEnumerator");
}
private static void EnumTextElementIndexes(String s) {
String output = String.Empty;
Int32[] textElemIndex = StringInfo.ParseCombiningCharacters(s);
for (Int32 i = 0; i < textElemIndex.Length; i++) {
output += String.Format(
"Character {0} starts at index {1}{2}",
i, textElemIndex[i], Environment.NewLine);
}
MessageBox.Show(output, "Result of ParseCombiningCharacters");
}
}