ben bilinen bir object o
bir int
veya uint
kutulu olmak zorunda:Unboxing uint/int
object o = int.MinValue
object o = (uint)int.MinValue // same bytes as above
Ben kutuda ne olduğunu bilmiyorum, umurumda olan tek şey Orada int
veya uint
veya uint
için zorlamak istediğiniz 4 bayt vardır. Bu benim (yerine kutuları) değerlerine sahip bir unchecked
bağlamda çalışıyor:
unchecked
{
int a = (int)0x80000000u; // will be int.MinValue, the literal is a uint
uint b = (uint)int.MinValue;
}
Not: C# varsayılan her şey işaretli olmadığı derken değişmezleri ve derleyici ile ilgileniyor çünkü kontrolsüz bağlam burada gereklidir Kendimizi yürüyerek vurup vurmayacağımızı bilmek istiyor.
sorunu (bu 4 bayt olduğunu yanı sıra) Ben neyin kutunun içini bilmiyorum artık, ama ben bir InvalidCastException
olsun yanlış tipine Unbox çalıştığınızda çalışma zamanı yapar. Bunun makul bir çalışma zamanı davranışı olduğunu biliyorum, ancak bu durumda ne yaptığımı biliyorum ve "denetlenmemiş bir kutuyu" istiyorum. Böyle bir şey var mı?
Biliyorum catch
ve yeniden deneyin, yanıt olarak sayılmaz.
dönüştürme taşma istisnalar yükseltir (ı kontrolsüz zorlama gerekir). Kutu içeriğinin kontrol edilmesi iyi bir fikir olsa da, daha iyi bir çözüm bulunmasını umuyor. –
@Johannes: Eğer 64 bitlik tamsayılar üzerinde çalışmaya ihtiyacınız varsa, daha büyük bir boyuta çevirerek istisnai durumdan kurtulmak için 'unchecked ((uint) Convert.ToInt64 (o))' yapamazsınız Bunu yapmak için daha büyük bir boyut. – Quartermeister