Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Кстати, вот еще пример. Из официального руководмтва Микрософт, между прочим
PD>Есть строка myString в формате CSV
PD>myDataSet.Tables["Table 1"].Rows.Add(myString.Split(char.Parse(",")));
PD>Берем строку, делаем из нее массив строк и по запихиваем этот массив в Rows. А нельзя ли без того, чтобы массив создавать ? В C++ я бы просто прошел по этой строке strtok и добавил строки — без всяких дополнительных массивов.
Павел. Ситуация со строками значительно интересней. Строка — это неvalue объект. И она не будет копироваться. Просто передается ссылка. А выделение маленького объекта в С# на порядок дешевле чем в С++. Поэтому это достаточно простой способ и эффективный.
Функции strtok нету(неприятная функция, я ее не люблю, в таких случаях работаю обычным поиском), точно также как нет split в С, но написать такую функцию легко. В принципе,
int i, l=0;
while ((i=myString.IndexOf(",", l))!=-1)
{
rows.Add(myString.Substring(i, l-i);
l=i;
}
Делает именно то, что заказывали. Без массива.
Сравните с тем-же самым в C++ только с strtok.
С уважением, Gleb.
ЗЫ. Интересно, если я напишу так
int l, i=0;
while ((i=myString.IndexOf(",", (l=i)))!=-1)
rows.Add(myString.Substring(i, i-l);
Хоть не читабельно, но зато красиво