Tag: 拆箱

为什么取消装箱枚举会产生奇怪的结果?

考虑以下:: Object box = 5; int @int = (int)box; // int = 5 int? nullableInt = box as int?; // nullableInt = 5; StringComparison @enum = (StringComparison)box; // enum = OrdinalIgnoreCase StringComparison? nullableEnum = box as StringComparison?; // nullableEnum = null. 2件事:: 为什么我可以拆箱到StringComparison ? 我想这是因为它的底层类型是Int32但我仍然发现它很奇怪。 为什么nullableEnum的值为null? 据我所知,唯一有效的拆箱是从盒装值类型到它的类型或可空类型。 如果int可以unbox到Enum ,那么为什么对于可空值可以不相同呢? 类似地,如果不是5个盒装的StringComparison.OrdinalIgnoreCase ,那么nullableInt将为null,但nullableEnum不会。

Box和UnBox是什么意思?

可能重复: 为什么我们需要在C#中装箱和拆箱? 什么是拳击和拆箱,有什么权衡? 在C#中,doe sit意味着什么:“Box and UnBox”? 这里是我创建Text的MSDN的摘录。 但这种便利需要付出代价。 添加到ArrayList的任何引用或值类型都隐式地向上转换为Object。 如果项目是值类型,则在将它们添加到列表时必须将它们装箱,并在检索它们时取消装箱。 铸造,装箱和拆箱操作都会降低性能; 在必须迭代大型集合的情况下,装箱和拆箱的效果可能非常显着。 谢谢!

拳击与拆箱

我最近的另一个C#面试问题是,如果我知道Boxing和Unboxing是什么。 我解释了堆上的值类型和Heap上的引用类型。 当一个值转换为引用类型时,我们将其称为装箱,反之亦然。 然后他让我算一算: int i = 20; object j = i; j = 50; 我是什么人? 我把它搞砸了,并说50,其实际为20.现在我想明白为什么,但是当我玩不同的组合时,我很惊讶地看到这个: Object a = 1; // Boxing Object b = a; // referencing the pointer on stack to both objects on heap a = 2; // Boxing 我期待看到b == 2 ,但事实并非如此,为什么? 是因为第二次拳击会破坏并替换堆上的整个对象吗? 因为如果我这样做,那很好: public class TT { public int […]

匿名类型

我有一个Dictionary(TKey, TValue)类的 Dictionary Deduction_Employees = new Dictionary(); 后来我在这个数组列表中添加了这样的匿名类型 var day_and_type = new { TheDay = myDay, EntranceOrExit = isEntranceDelay }; Deduction_Employees[Employee_ID].Add(day_and_type); 现在我该如何取消对var的访问并访问这些属性?

如何从对象中取消对它包含的类型,在编译时不知道该类型?

在运行时我得到某种类型的盒装实例。 如何将其拆箱到基础类型? Object obj; String variable = “Some text”; obj = variable // boxing; // explicit unboxing, because we know the type of variable at compile time. var x = (String)obj // Now let’s pretend that we don’t know the type of underlying object at compile time. Type desiredType = obj.GetType(); // But we can […]

valueType.ToString()是否对valueType进行了强制转换?

让我们说,我在c#中有以下代码 int x = 0; x.ToString(); 这内部做x拳击吗? 有没有办法从视觉工作室看到这种情况?

C# – 装箱/拆箱/类型转换的问题。 我不明白

我很难理解这一点。 请考虑以下示例: protected void Page_Load(object sender, EventArgs e) { // No surprise that this works Int16 firstTest = Convert.ToInt16(0); int firstTest2 = (int)firstTest; // This also works object secondTest = 0; int secondTest2 = (int)secondTest; // But this fails! object thirdTest = Convert.ToInt16(0); int thirdtest2 = (int)thirdTest; // It blows up on this line. } […]

在“out”参数中传递值类型会导致变量被装箱吗?

我知道拳击和拆箱在性能方面相对昂贵 。 我想知道的是: 将值类型传递给方法的out参数会导致变量的装箱/取消装箱(从而导致性能下降)吗? 编译器可以优化它吗? int number; bool result = Int32.TryParse(value, out number);

为什么我不能修改取消装箱转换的结果?

struct Point { public int x; public int y; } void Main() { Point p; px = 1; py = 1; Object o = p; ((Point) o).x = 4; // error ((Point) o).x = 5; // error ((Point) o).x = 6; // error p = (Point) o // expect 6 } 为什么不编译 ldloc.1 // o […]