Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2012, 13:36   #1
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию Вопрос на засыпку

Очередной.

В каком случае необходимо писать if (flag == true) вместо if (flag)?

(работа в индусской промышленности не в счёт)
ds.Dante вне форума Ответить с цитированием
Старый 25.07.2012, 15:14   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Не знаком с .Net, какая там типизация? Если допустить, что flag не булева переменная, а целочисленная, то если flag = 1, тогда if (flag) сработает, а if (flag == true) - нет.
Всего лишь моя догадка.
Arigato вне форума Ответить с цитированием
Старый 25.07.2012, 16:12   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

flag-булева переменная
if(flag)-если флаг true идет в if
if(!flag)-если флаг false идет в if
flag-любой другой тип, тогда все равно надо кастить к bool, а уж как какой тип кастится большой вопрос.
if (flag == true) - я не использую, засоряет код, да и зачем явное сравнение?
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 25.07.2012, 16:19   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код:
if (flag == true)
Я всегда делаю так, потому что ближе к естественному языку . Если флаг=истина то выполняем какое-либо действие.
Однако, сам факт того, что язык допускает более короткое наименование уже говорит что нужно использовать именно его.
Также все зависит от того какие стандарты используются в Вашей конторе . Этот аргумент обычно самый веский.

PS. На Мелкософте для логических выражений используется именно короткая форма, хотя прямого указания что и как писать для if (как например для 1С) нету.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 25.07.2012 в 16:22.
Utkin вне форума Ответить с цитированием
Старый 25.07.2012, 17:05   #5
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Ни в каком. Если flag является булевым типом или в неявном виде способен вернуть булевое значение.
Код:
using System;

public class ImplicitObject
{
    public int Value { get; set; }

    public static implicit operator bool(ImplicitObject obj)
    {
        return obj.Value != 0;
    }
}

class Program
{
    static void Main(string[] args)
    {
        ImplicitObject obj = new ImplicitObject();
        obj.Value = 0;
        if (obj)
            Console.WriteLine("True");
        else
            Console.WriteLine("False");
        obj.Value = 1;
        if (obj)
            Console.WriteLine("True");
        else
            Console.WriteLine("False");
        Console.ReadKey(true);
    }
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 25.07.2012, 21:45   #6
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

В каком случае if (flag == true) будет работать очевидным образом, а if (flag) вызовет ошибку компиляции?
ds.Dante вне форума Ответить с цитированием
Старый 25.07.2012, 22:20   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

могу предположить что если у класса есть сравнение с bool(оператор всм), а приведения к bool нету.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.07.2012, 11:49   #8
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Как всегда, пришёл Пепел Феникса и всё разрулил.

Правда я, когда задавал вопрос, подразумевал более простой ответ.

Код:
bool? flag = true;
if (flag == true)
	Console.WriteLine("Hello, world!");
if (flag) // CS0266: Cannot implicitly convert type 'bool?' to 'bool'
	Console.WriteLine("Hello, world!");
ds.Dante вне форума Ответить с цитированием
Старый 26.07.2012, 12:45   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Правда я, когда задавал вопрос, подразумевал более простой ответ.
Правда надо формулировать правильно вопрос.
bool? вообще-то не bool и здесь явно только длинная форма. Короткая форма используется только для типа bool. Код вдруг оброс новыми подробностями
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 26.07.2012 в 13:23.
Utkin вне форума Ответить с цитированием
Старый 26.07.2012, 16:33   #10
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

А я нигде не говорил, что flag имеет тип bool.
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос на засыпку по show columns smoke888 SQL, базы данных 5 17.09.2012 12:46
Вопрос на засыпку mnbvcxz13 Свободное общение 3 09.11.2011 18:36
вопрос на засыпку...... Rukata Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 19.09.2009 23:39
Вопрос на засыпку BuT@JL Помощь студентам 6 08.03.2009 12:56