Недавно я начал программировать на C# и писать приложения ASP.NET MVC. Я делал что-то похожее на это:
var hashtable = new Hashtable();
hashtable.Add("First", 12);
hashtable.Add("Second", 12);
if(hashtable["First"] == hashtable["Second"])
{
Console.WriteLine("Equal");
}
else{
Console.WriteLine("Not Equal");
}
Он всегда выводит Not Equal
. Через некоторое время я понял, что это был эффект бокса. Однако, если я напишу следующее:
var hashtable = new Hashtable();
hashtable.Add("First", 12);
hashtable.Add("Second", 12);
dynamic ViewBag = new System.Dynamic.ExpandoObject();
ViewBag.hashtable = hashtable;
if(ViewBag.hashtable["First"] == ViewBag.hashtable["Second"])
{
Console.WriteLine("Equal");
}
else
{
Console.WriteLine("Not Equal");
}
Он всегда выводит Equal
.
Каков основной механизм, вызывающий эту разницу?
ViewBag.hashtable["First"]
, в то время какhashtable["First"]
все еще находится в упаковке. - person foresightyj   schedule 11.12.2014