Tag: 拳击

引用值类型的相等性

我做了一些ref关键字测试,有一个认为我无法理解: static void Test(ref int a, ref int b) { Console.WriteLine(Int32.ReferenceEquals(a,b)); } static void Main(string[] args) { int a = 4; Test(ref a, ref a); Console.ReadLine(); } 为什么此代码显示为False ? 我知道int是一个值类型,但在这里它应该传递对同一个对象的引用。

如何一步将盒装二维数组转换为二维字符串数组?

有没有办法使用C#/ .NET Framework 4.0一步将盒装的二维数组转换为二维字符串数组? using ( MSExcel.Application app = MSExcel.Application.CreateApplication() ) { MSExcel.Workbook book1 = app.Workbooks.Open( this.txtOpen_FilePath.Text ); MSExcel.Worksheet sheet1 = (MSExcel.Worksheet)book1.Worksheets[1]; MSExcel.Range range = sheet1.GetRange( “A1”, “F13” ); object value = range.Value; //the value is boxed two-dimensional array } 我希望某种forms的Array.ConvertAll可能会起作用,但到目前为止答案已经没有了。

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. } […]

在int和string中装箱和拆箱

我在拳击和拆箱方面有点困惑。 根据其定义 Boxing是ValueTypes到引用类型(Object)的隐式转换。 UnBoxing是将引用类型(Object)显式转换为其等效的ValueTypes。 描述这个的最好例子是 int i = 123; object o = i; // boxing 和 o = 123; i = (int)o; // unboxing 但我的问题是int是否是值类型而字符串是引用类型 int i = 123; string s = i.ToString(); 和 s = “123”; i = (int)s; 这是拳击和拆箱的例子吗?

通用约束如何防止使用隐式实现的接口装箱值类型?

我的问题与此问题有些相关: 显式实现的接口和通用约束 。 然而,我的问题是编译器如何启用通用约束来消除对显式实现接口的值类型进行装箱的需要。 我想我的问题归结为两个部分: 在访问显式实现的接口成员时需要将值类型装箱的幕后CLR实现发生了什么,以及 删除此要求的通用约束会发生什么? 一些示例代码: internal struct TestStruct : IEquatable { bool IEquatable.Equals(TestStruct other) { return true; } } internal class TesterClass { // Methods public static bool AreEqual(T arg1, T arg2) where T: IEquatable { return arg1.Equals(arg2); } public static void Run() { TestStruct t1 = new TestStruct(); TestStruct t2 = […]

如何测试一个值是否在C#/ .NET中装箱?

我正在寻找一种编写代码来测试值是否已装箱的方法。 我的初步调查表明,.NET IsValueType一切地隐瞒事实,这意味着GetType()和IsValueType不会显示盒装值和未装箱值之间的差异。 例如,在下面的LinqPad C#表达式中,我相信o1是盒装的,而i1不是盒装的,但是我想用一种方法在代码中测试它,或者,第二个最好的方法,在看任何时候知道它的确定变量或值,即使它的类型是“动态”或“对象”,无论是盒装还是不盒装。 任何建议? // boxed? — no way to tell from these answers! object o1 = 123; o1.GetType().Dump(“o1.GetType()”); o1.GetType().IsValueType.Dump(“o1.GetType().IsValueType”); // not boxed? — no way to tell from these answers! int i1 = 123; i1.GetType().Dump(“i1.GetType()”); i1.GetType().IsValueType.Dump(“i1.GetType().IsValueType”);

在“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 […]

拳击和拆箱:什么时候出现?

所以我明白拳击和拆箱是什么。 什么时候出现在现实世界的代码中,或者在什么样的例子中出现问题? 我无法想象做这样的事情: int i = 123; object o = i; // Boxing int j = (int)o; // Unboxing …但这几乎肯定是极度过于简单,我甚至可能在之前不知道它的情况下完成了装箱/拆箱。