C# строки String
Строки ссылочный тип, все верно. Всегда происходит только присваивание ссылки на нее, копирования данных не происходит.
спасибо
The methods allocate memory for the return value array object and a String object for each array element. If managing memory allocation is critical in your application, consider using the method, and optionally the method, to locate a substring within a string.
If you are splitting a string at a separator character, use the IndexOfAny method to locate a separator character in the string. If you are splitting a string at a separator string, use the IndexOfAny method to locate the first character of a separator string. Then use the Compare method to determine whether the characters after that first character are equal to the remaining characters of the separator string.
Так вот, как выделить подстроку из строки не выделяя при этом память? это вообще возможно в .NET или запрещено как потенциально опасное?
а как это можно сделать вообще? о-О
дык вот я и спрашиваю, т.к. нигде (в том числе и в MSDN) ничего не нашел...
А на хрена это вообще нужно?
вообще вопрос не был не в том, нахрена это нужно и проч. А в том - возможно ли вообще такое?
---
"Narrowness of experience leads to narrowness of imagination."
хорошим способом нельзя
можно через всякие обходные пути, но это уже будет сильно зависит от того, что с этой подстрокой необходимо сделать дальше.
п.с. жаль, что нельзя.. ладно, тогда тему закрываем...
Хочешь быстро - юзай StringBuilder, если мне не изменяет память, где-то над ним даже слайсы (то что ты хотел) были, или их можно было быстро написать.
на x86, разумеется
4 байта длина и дальше двухбайтовые символы
String members
public char[] ToCharArray
Return Value: A Unicode character array whose elements are the individual characters of this instance . If this instance is an empty string, the returned array is empty and has a zero length.
и это:
upd: Хотя нет, возможно я ошибаюсь, т.к. полагал что ToCharArray возвращает то, что действительно находится внутри string-объекта и через него можно менять содержимое. Сейчас проверил - это не так....
A String object is called immutable (read-only) because its value cannot be modified once it has been created. Methods that appear to modify a String object actually return a new String object that contains the modification. If it is necessary to modify the actual contents of a string-like object, use the System.Text.StringBuilder class.

---
...Я работаю антинаучным аферистом...

я просто подумал, что если бы хранить строку как структуру так: указатель на начало данных и их длину, а данные хранить отдельно, то можно было бы нахаляву получить подстроку без выделения доп памяти
int [] a = new int[str.Length];
for (int i = 0; i < str.Length; i++)
{
a[i] = str[i] + 1;
}
Кроме того, никто не мешает сделать так:
public class Substring
{
private string str;
private int start;
private int length;
public Substring(string str, int start, int length) {...}
public char this[int position] { get { ... }}
}
По сути ты получаешь тот же функционал, только навернутый над быстрой реализацией string.
думается любой оптимизатор закатает для цикла ссылку в регистр. Зато удобнее и большая экономия памяти
Про оптимизатор согласен. В принципе, если найдутся важные приложения фичи "дешевой" подстроки, то так и сделают. Поскольку никто не завязывается на внутреннее строение string, никто не мешает его изменить. Для этого лишь необходимо, чтобы этого захотел МС. А захочет он этого, если его попросить хорошо и аргументировано. Просить можно
---
"Расширь своё сознание!"
в каких? о-О
из творения Лаксена и Перри (Laxen & Perry F83
если не у них самих.
По крайней мере, в F-PC (Zimmer, Bawd, Ting & al.) это уже есть.
Версия 3.5 относится к ноябрю 89-го.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
oleg1331
Если я не ошибаюсь, то string является ссылочным классом? (Addison Wesley - CSharp Primer A Practical Approach) Тогда вопрос:Будут ли копироваться сами строки (т.е. создаваться дубликаты) при такой инициализации, или же ArrayList будет работать с теми же экземплярами строк, что и в words?
Ну и аналогично - происходит ли копирование данных при вызове функции aKeys.Add(string str)?