Почему не работет след код?
От:
Аноним
Дата: 05.12.05 09:25
Оценка:
Hashtable table = new Hashtable();
table["key" ] = true ;
if (table["key" ] == (object )true )
Console.WriteLine("bool!" );
Re: Почему не работет след код?
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: Почему не работет след код?
Здравствуйте, Аноним, Вы писали:
А>А>Hashtable table = new Hashtable();
А>table["key" ] = true ;
А>if (table["key" ] == (object )true )
А> Console.WriteLine("bool!" );
А>
Надо так:
((bool)table["key"])==true
В твоем примере ты true приводишь к типу object — происходит боксинг. Потом ты сравниваешь ссылку, находящуюся в хештаблице с ссылкой, получившейся при боксинге, те ты сравниваешь произвольные адреса(ссылки)
Re: Почему не работет след код?
Здравствуйте, <Аноним>, Вы писали:
А>А>Hashtable table = new Hashtable();
А>table["key" ] = true ;
А>if (table["key" ] == (object )true )
А> Console.WriteLine("bool!" );
А>
Подозреваю, что потому, что у Вас сравнение идет как объектов, а не как булов.
Приведите лучше table["key"] к булу в сравнении
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: Почему не работет след код?
Здравствуйте, <Аноним>, Вы писали:
А>А>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
ссылка на оригинальное сообщение
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить