Что такое строки действительно в.NET?

«Я делал это таким образом и нашел сообщение, в котором говорится, что оно может даже не выполняться»

Возможно, оно не будет выполнено, потому что вы не вызываете обработчик завершения на всех путях.

Как сказал Ш_Кхан в своем ответе, вам на самом деле здесь не нужен обработчик завершения, вам нужно использовать методы делегата, чтобы получать информацию о его завершении и о том, был ли он успешным или нет. Но ваша особая проблема с вашим конкретным кодом заключается в том, что вы не вызываете завершение в операторе if.

if !self.canMakePayments {
    return
}

Вероятно, должно быть

guard canMakePayments else {
    completion()
    return
} 

В вашем коде, если canMakePayments имеет значение false, ваш код завершения не будет выполнен.

5
задан GEOCHET 10 December 2008 в 20:14
поделиться

9 ответов

строка.NET не является просто массивом символов. Это содержит массив символов, так строго говоря, это, имеет - a.

Кроме того, существует большая связанная с Unicode тонкость, где это не ведет себя ничто как массив. Конкатенация символа может сделать намного больше, чем просто увеличение длину строки одной и вставить новый символ в конце. Согласно правилам нормализации Unicode, это может на самом деле поменять всю струну. Таким образом, это - определенно ничто как массив символов, но где-нибудь в классе, такой массив существует.

7
ответ дан 18 December 2019 в 09:10
поделиться

Это зависит от Вашего определения слова "строка".

System.String тип в.NET имеет символьный массив как внутреннее хранилище (это также хранит длину (который является O (1)), среди прочего, например).

Но последовательность слов означает последовательное возникновение чего-то в целом, которое могло бы также означать символьный массив :))

Между прочим, когда я сказал string тип имеет "символьный массив", я не имел в виду "поле типа char[]"конкретно. Я имел в виду общее значение слова "массив" как заказанный набор чего-то.:))

7
ответ дан 18 December 2019 в 09:10
поделиться

Семантическое значение строки является вторым.

.Net String class поддерживает внутреннее хранилище (имеет-), и может выставить то хранилище столькими абстрактными способами, сколько разработчики выбирают.

Вопрос похож "На действительно ли Apple, красная круглая вещь? Поскольку я всегда думал, что это был фрукт".

3
ответ дан 18 December 2019 в 09:10
поделиться

MSDN: строковый тип представляет строку символов Unicode.

Это означает: это - массив символа Unicode.

1
ответ дан 18 December 2019 в 09:10
поделиться

Абстрактным способом (и я предполагаю при разметке в памяти) - это - массив символов.

Исправьте меня, если я неправ в размышлении этого.

0
ответ дан 18 December 2019 в 09:10
поделиться

Это зависит от языка и реализации. На наиболее базовом уровне (символ ASCII* строка) это - последовательная серия адресов памяти, каждый из которых содержат короткое целое, соответствующее коду ASCII и завершенный пустым указателем (символ (0)). Большинство высокоуровневых языков обеспечивает строковый объект, который имеет символьный массив, а также удобные методы, потому что, работая с символом* строки являются более или менее болью сзади.

0
ответ дан 18 December 2019 в 09:10
поделиться

Строка является названием класса. Это имеет различные значения на различных языках. Это мог быть unicode или ASCII, внутренне означающий, что это - механизм хранения, ряд байтов. Этот класс обеспечивает функции для управления своей собственной внутренней памятью, и это не предназначено, чтобы быть непосредственно полученным доступ и измененным вследствие того, что это могло содержать символы во множестве различной кодировки. Таким образом в целях Вашего вопроса, это имеет - хранилище байта.

0
ответ дан 18 December 2019 в 09:10
поделиться

Зависит от точно, как Вы смотрите на него. Если Вы прикрепляете его с GCHandle и затем смотрите на память, где это находится, Вы, видят, что это - на самом деле 32-разрядный дескриптор длины, сопровождаемый сразу массивом unicode символов (знают, что AddrOfPinnedObject даст Вам адрес первого символа, не длину. Если бы это дало адрес длины, то это было бы намного менее полезно для P/Invoking).

0
ответ дан 18 December 2019 в 09:10
поделиться

Функционально, строка является списком или последовательностью, символов. Строки часто хранятся прозрачно как символьные массивы (например, в C), таким образом, мы часто отсылаем к ним тот путь. Массивы предоставляют удобный произвольный доступ к символам, который важен для некоторых алгоритмов.

В других целях, тем не менее, хранящих строки Unicode, поскольку, UTF-8 мог бы быть наиболее соответствующей формой. Обратите внимание, что, хотя это хранится в массиве байтов, больше нет взаимно-однозначного соответствия между байтами и символами: Ваши строковые алгоритмы обычно должны получать доступ к символам последовательно с начала - как список.

Мораль этой истории: Ваш код строки должен только потребовать произвольного доступа, если ему на самом деле нужен он. Вы могли бы быть удивлены, как редко Вам действительно нужен массив символов.

0
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: