Почему не работет след код?
От: Аноним  
Дата: 05.12.05 09:25
Оценка:
Hashtable table = new Hashtable();
table["key"] = true;
if (table["key"] == (object)true)
     Console.WriteLine("bool!");
Re: Почему не работет след код?
От: TK Лес кывт.рф
Дата: 05.12.05 09:36
Оценка:
Hello, " Аноним "
>
> Hashtable table = new Hashtable();
> table["key"] = true;
> if (table["key"] == (object)true)
>     Console.WriteLine("bool!");
>


Потому, что оператор == для типа Object не перегружен. Этот код аналогичен
Object.ReferenceEquals
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Почему не работет след код?
От: Константин Ленин  
Дата: 05.12.05 09:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>Hashtable table = new Hashtable();
А>table["key"] = true;
А>if (table["key"] == (object)true)
А>     Console.WriteLine("bool!");
А>



Надо так:

((bool)table["key"])==true

В твоем примере ты true приводишь к типу object — происходит боксинг. Потом ты сравниваешь ссылку, находящуюся в хештаблице с ссылкой, получившейся при боксинге, те ты сравниваешь произвольные адреса(ссылки)
Re: Почему не работет след код?
От: AlLucky Беларусь Qulix Systems
Дата: 05.12.05 09:37
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>
А>Hashtable table = new Hashtable();
А>table["key"] = true;
А>if (table["key"] == (object)true)
А>     Console.WriteLine("bool!");
А>


Подозреваю, что потому, что у Вас сравнение идет как объектов, а не как булов.
Приведите лучше table["key"] к булу в сравнении
http://www.qulix.com — Разработка систем любой направленности и сложности
Aleksandr Sly
Re: Почему не работет след код?
От: Аноним  
Дата: 05.12.05 09:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>Hashtable table = new Hashtable();
А>table["key"] = true;
А>if (table["key"] == (object)true)
А>     Console.WriteLine("bool!");
А>


Примерно по той же причине, что и

private void Form1_Load(object sender, System.EventArgs e)
{
    this.Text = (object)true == (object)true ? "TRUE" : "FALSE";
}


всегда выдаст "FALSE" в заголовке формы. Две операции боксинга для одного значения value-type выдают два разных бокса, т.е. ((object)true).ReferenceEquals((object)true) всегда false.
Re: Почему не работет след код?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.12.05 23:08
Оценка: :)))
Здравствуйте, <Аноним>, Вы писали:

А>
А>Hashtable table = new Hashtable();
А>table["key"] = true;
А>if (table["key"] == (object)true)
А>     Console.WriteLine("bool!");
А>


Точно проверил? Он точно рабоатет. Только не так как ты хочешь.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Почему не работет след код?
От: Аноним  
Дата: 06.12.05 06:46
Оценка:
Здравствуйте, Константин Ленин, Вы писали:

КЛ>Здравствуйте, Аноним, Вы писали:


А>>
А>>Hashtable table = new Hashtable();
А>>table["key"] = true;
А>>if (table["key"] == (object)true)
А>>     Console.WriteLine("bool!");
А>>



КЛ>Надо так:


КЛ>((bool)table["key"])==true


КЛ>В твоем примере ты true приводишь к типу object — происходит боксинг. Потом ты сравниваешь ссылку, находящуюся в хештаблице с ссылкой, получившейся при боксинге, те ты сравниваешь произвольные адреса(ссылки)


А почему это не так для строк?
Re[3]: Почему не работет след код?
От: iss Россия  
Дата: 06.12.05 07:02
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А почему это не так для строк?


Строка не валуе тип
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Почему не работет след код?
От: Аноним  
Дата: 06.12.05 07:15
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, <Аноним>, Вы писали:


А>>
А>>Hashtable table = new Hashtable();
А>>table["key"] = true;
А>>if (table["key"] == (object)true)
А>>     Console.WriteLine("bool!");
А>>


VD>Точно проверил? Он точно рабоатет. Только не так как ты хочешь.


согласен влад
ты то точно сможешь найти неточность в любом высказывании
Re[3]: Почему не работет след код?
От: SiAVoL Россия  
Дата: 06.12.05 10:54
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А почему это не так для строк?

и для строк можно сочинить аналогичный пример
            string str1 = "ab";
            string str2 = "abc";
            str2 = str2.Substring(0, 2);
            Console.WriteLine((object)str1 == (object)str2);

False
Press any key to continue

Для чего "извращения" со второй строкой, можно почитать в МСДН: String.Intern
... << RSDN@Home 1.2.0 alpha rev. 569>>
RE: Почему не работет след код?
От: Аноним  
Дата: 05.12.05 09:34
Оценка:
Hashtable table = new Hashtable();
table["key"] = true;
if (table["key"] == (object)true)
Console.WriteLine("bool!");
Попробуй так
Hashtable table = new Hashtable();
table.Add("key",true);


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.