Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C# вывод переменных 
:(
    Опции темы
transkriptsiya
Дата 2.12.2012, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



Console.WriteLine("Welcome {0}", userName); 

выводим на консоль переменную 

Console.WriteLine ("Welcome " + userName); делает абсолютно тоже

подскажите зачем заморочиваються с {0}  ?
PM MAIL   Вверх
boevik
Дата 2.12.2012, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: нет
Всего: 35



В таком простом примере как ты привел, возможно ты и прав.
Но в более сложных конструкциях, когда есть более 1 переменной в стринге проще написать:
Код

Console.WriteLine("Welcome {0}. The time is now: {1}", userName, DateTime.Now.ToString());




--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
transkriptsiya
Дата 2.12.2012, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



ок. понятно
PM MAIL   Вверх
Arantir
Дата 2.12.2012, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 1
Всего: 55



"Welcome " + userName - это конкатенация строк.
"Welcome {0}" - это форматированная строка.
Это две совсем разные вещи, использующиеся при разных обстоятельствах. Но по стечению случая обе используются в одной функции и вызывают непонятки у новичков.

Console.WriteLine("{0}", var) == Console.WriteLine(String.Format({0}, var));
Лишь для упрощения используется общая семантика.

Форматирование использует конкатенацию строк. Но все это инкапсулировано внутри форматирования и упрощает жизнь.

Формат:
Код

String.Fromat("{0,10}", var) == "          " + var;
String.Fromat("{0,-10}", var) ==  var + "          ";
String.Fromat("{2}{4}{0}{3}{1}", objects) == objects[2] + objects[4] + objects[0] + objects[3] + objects[1];


Конкатенация:
Код

while(flag)
{
    str1 += str2;
}
//то же самое что:
while(flag)
{
    String.Format("{0}{1}", str1, str2);
}


Как можно заметить, для удобного вывода каких-то данных пользователю был придуман String.Format(). В то время как для внутернних служебных операций более понятным действием представляется простая конкатенация.

Поскольку и конкатенация и String.Format() возвращают строковой тип, то они взаимозаменяемы практически везде. Все зависит от целесообразности пользования того или иного.

Это сообщение отредактировал(а) Arantir - 2.12.2012, 15:10


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
transkriptsiya
Дата 2.12.2012, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 17.1.2008

Репутация: нет
Всего: нет



спасибо. Разницу прочувствовал.
PM MAIL   Вверх
gambit
Дата 6.12.2012, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Первый вариант проще вынести в ресурсы, например для мультиязычности, при работе с форматами строк, в ресурсы выносится только она, при прямой контатации, необходимо выести каждый кусок.
PM MAIL ICQ Skype   Вверх
mihryak
Дата 10.12.2012, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(Arantir @  2.12.2012,  16:09 Найти цитируемый пост)
Поскольку и конкатенация и String.Format() возвращают строковой тип, то они взаимозаменяемы практически везде. Все зависит от целесообразности пользования того или иного.

Нет, прямая конкатенация, по-хорошему, должна использоваться только в случае соединения двух строк. Если строк больше, стоит использовать либо string.Format, либо string.Concat, либо StringBuilder (тут как раз в зависимости от целесообразности стоит выбирать).
Причина кроется в принципах работы со строками: при прямой конкатенации через "+" после каждого добаления будет создаваться промежуточная строка, к которой будет прибаляться следующий операнд. Это приводит к перерасходу и "замусориванию" памяти. StringBuilder, string.Concat и string.Format обрабатывают такие ситуации гораздо эффективнее на уровне внутренней работы с памятью. Расписывать детали не хочется, достаточно погуглить, что есть и зачем используется StringBuilder - ответ и к другим опциям будет применим.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.