![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
ivashkanet |
|
||||||||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
В теме Преобразование типов, товарища bankuss-а, была затронута тема преобразования типов (int в string).
По этому поводу велись большие дискуссии: Например, такой код почему-то неработает в C#, а в VB -- работает.
Здесь lk -- string, km -- int. Были даны комментарии (arilou):
После чего последовало много коментариев:
Это, как говориться, присказка, а сказка будет впереди. Кто сможет, с ходу, без компиляции кода, решить задачку: Дан простой код
Вопрос: какое значение примет str, и примет ли вообще? Ответ пояснить (т.е. почему именно так, а не иначе). P.S. Вечером дам правильный ответ и коментарии. P.P.S. Просьба подумать самим, код не компелировать, только если для проверки своей точки зрения. P.P.P.S. mr.DUDA, arilou и другие модераторы, не отвечайте, пожалуйста, на вопрос сразу. Потерпите, пожалуйста, жотя бы до обеда. Не сбивайте интригу. Это сообщение отредактировал(а) ivashkanet - 22.3.2006, 08:54 |
||||||||||||
|
|||||||||||||
FatherFrost |
|
|||
![]() Почетный Мороз ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 27.4.2005 Где: Крайний север Репутация: нет Всего: 6 |
Этот код вообще не скомпилится. Если ты напишешь:
то компилятор тебе не даст это сделать. В своем задании ты предлагаешь сделать примерно тоже самое. Насколько я понял, объяснение этому уже дал arilou. Строка 2 в твоем задании по сути повторяет строку bankuss-а... Вот и все... -------------------- Задаю много глупых вопросов.... |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Имхо, данный код не скомпилится, поскольку ты присваиваешь int string'у без преобразования (хотя и оно все равно не получилось бы).
|
|||
|
||||
ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Согласен, не скомпилируется!!! Но вопрос "почему" остается открытый!!! Ответы типа: нет яного или неявного преобразования, не принимаеться. Ведь ввести его, как это сделано в VB, могу даже я сам!!! Явное:
Или неявное:
Так печему же не сделали это разработчики??? Вот в чем вопрос??? Почему они отказались от явного или неявного преобразования???? P.S. Можно глянуть в название темы. |
||||||
|
|||||||
Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 9 Всего: 172 |
Потому что непонятно, что ты хочешь сделать строкой
- то ли сложить два числа и далее инициализировать стринг ("23"), то ли получить "1013". Отсутствие неявной конвертации в стринг по-моему более безопасно. Никто не мешает написать например
или
В общем, не понимаю в чем проблема. -------------------- |
||||||
|
|||||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Интересно, почему тогда вот так можно:
![]() -------------------- ![]() |
|||
|
||||
ivashkanet |
|
||||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Именно Вот это я и хотел сказать. Что С# -- язык, в котором уже на этапе компиляции должны отпадасть все неопределенности и двусмысленности!!! ![]() И хочу поделиться, увиденным мною, принципом языка C#: Если запись может трактоваться двусмысленно -- то она не должна присутствовать в языке!!! Программист должен явно указать, что он хочет сделать. Например, если добавить пустую строку в начало:
то все будет хорошо (str+int = str) и результат будет "2134" А если в конец:
то int +int = int, int + str =str и результат будет "136" То есть двусмысленность отпала (раз мы используем "", то явно результат строка) P.S. В общем мне понравилась строгость языка C# и я захотел поделиться этим с другими. А то бывает неделю ищешь ошибку, а она рассмотренного типа ![]() P.P.S. Всем спасибо. Я люблю C#. Прям балдею. |
||||||||
|
|||||||||
ivashkanet |
|
||||||||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Тут скорее всего такая ситуация:
эквивалентно записи
str + int = str -- все пуском ![]() А код
скорее всего соответствует коду
Скобки стоят потому, что в операторе += сначала считается правая часть, а потом она добавляется к переменной слева. И вообще += нет в операторах C#, он скорее всего обрабатыветься при синтаксическом разборе кода. P.S. mr.DUDA, пока писал прозевал твое сообщение. |
||||||||||||
|
|||||||||||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
ivashkanet, так это всё ясно. Непонятно, почему при конкатенации строки с int-ом идёт неявное преобразование int->string, а при присваивании - нет
![]() Добавлено @ 17:00 З.Ы, ещё я хотел бы попросить не злоупотреблять ОГРОМНЫМ шрифтом - в глазах рябит ![]() -------------------- ![]() |
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Ну так написано ж
А int + str -- все ясно: str к int не приведешь, поэтому однозначно нужно приводить int к str. |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
вот это "нужно" почему-то не совсем ясно почему именно оно нужно ![]() -------------------- ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Не понял, поясни. P.S. Каждый оператор что-то должен делать. У этого только два варианта (см. выше), из которых первый бессмысленный. ![]() |
|||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
В языке, в котором синтаксисом запрещено приведение int к string, не должно быть неявного приведения в частном случае. Если и так не понятно, то вот тебе код:
Я считаю, что такое несоответствие - это недоработка компилятора. -------------------- ![]() |
||||
|
|||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Может ты и прав, у каждого свое мнение. Но на мой взгляд неопределенности и двуссмысленности нет. Поэтому можно его сделать неявным.
Хотя..., только сейчас подумал, почему не сделать явное преобразование int в strins вся ответственность в этом случае ложится на программиста ![]() P.S. mr.DUDA, не оскверняй светлый лик C# (шутка) ![]() |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
C# - это ведь не PHP, где всё можно ![]() -------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |