23 {
25 {
26 return string.Empty;
27 }
28 ReadOnlySpan<char> readOnlySpan =
s;
29 int num = 0;
30 while (num <
s.Length)
31 {
32 if (
char.IsHighSurrogate(readOnlySpan[num]) && num <
s.Length - 1 &&
char.IsLowSurrogate(readOnlySpan[num + 1]))
33 {
34 SurrogateCasing.ToLower(readOnlySpan[num], readOnlySpan[num + 1], out var hr, out var lr);
35 if (readOnlySpan[num] != hr || readOnlySpan[num + 1] != lr)
36 {
37 break;
38 }
39 num += 2;
40 }
41 else
42 {
43 if (
ToLower(readOnlySpan[num]) != readOnlySpan[num])
44 {
45 break;
46 }
47 num++;
48 }
49 }
51 {
53 }
54 return string.Create(
s.Length, (
s, num), delegate(Span<char>
destination, (
string s,
int i)
state)
55 {
56 ReadOnlySpan<char> readOnlySpan2 =
state.s;
59 });
60 }
static char ToLower(char c)