引用
作者 Jonathan Allen 译者 王瑜珩 发布于 2009年6月1日 InfoQ
C#对装箱后的值类型支持的并不好。与VB不同,==这样的基本算术比较符无法在装箱后的类型上得到正确的结果,即使所比较的值属于同一类型。
变量 类型 值
a int 0
b decimal 0.0
c decimal 0.0
boxA boxed int 0
boxB boxed decimal 0.0
boxC boxed decimal 0.0
dynA dynamic holding an int 0
dynB dynamic holding a decimal 0.0
dynC dynamic holding a decimal 0.0
比较 C# VB
a==b true true
b==a true true
b==c true true
a.Equals(b) false <--
b.Equals(c) true <--
boxA == boxB false true
boxB == boxA false true
boxB == boxC false true
boxA.Equals(boxB) false <--
boxB.Equals(boxC) true <--
dynA == dynB true n/a
dynB == dynA true n/a
dynB == dynC true n/a
从上表可以看出,在C#3与之前的版本中,即使两个装箱的值都是decimal类型的,得到的也是不相等的结果,但是Decimal类的Equals方法返回的却是true。
幸好在C#4中可以避免这样的问题。你需要将装箱的值都转换为dynamic类型然后再比较,这样即使两个值本来的类型不相同,也可以得到正确的结果。
Console.WriteLine((dynamic)boxA == (dynamic)boxB);
分享到:
相关推荐
c#中判断只允许输入大于零的小数和整数验证
c#入门经典 0基础入门经典 c#入门经典 0基础入门经典 c#入门经典 0基础入门经典 c#入门经典 0基础入门经典
c#入门经典,0基础学习 c#入门经典,0基础学习 c#入门经典,0基础学习
C#中各种数组的性能比较 一维0基数组 交错数组 多维数组
C#与西门子通讯C#与西门子通讯C#与西门子通讯C#与西门子通讯C#与西门子通讯C#与西门C#与西门子通讯C#与西门子通讯C#与西门子通讯C#与西门子通讯C#与西门子通讯C#与西门子通讯C#与西门子通讯C#与西门子通讯子通讯C#与...
C#中调用Windows API的要点 在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的。本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的...
C#中得到网卡号C#源代码 using System.Management; //get the MAC address ManagementClass mc=new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc=mc.GetInstances(); ...
C# 0/1背包问题 过程演示 源码。比较简单,但是网上在此之前好像没出现过。
字符串0GC补充方案 , 整体思想是用1点多MB的内存空间换取0GC。详细报告可以查看网址:https://coh5.cn/p/1ace6338.html
C# 在控制台程序中调用influxdb,C# 是4.7.2,influxdb是1.7详细步骤在:https://blog.csdn.net/weixin_62604823/article/details/129174326?spm=1001.2014.3001.5501
C#日期格式化语法,C#日期格式化语法,C#日期格式化语法
16位0-F随机数生成器 源代码基于c# 支持txt打开 支持数量输入 支持修改更多的数量
C# 中改变显示器的分辨率和刷新频率 void ChangeRes() { Form1 t = new Form1(); long RetVal=0; DEVMODE dm = new DEVMODE(); dm.dmSize= (short)Marshal.SizeOf(typeof(DEVMODE)); dm.dmPelsWidth = 1024; ...
文件较大,上传有限制,没办法,只能分开上传,忘大家谅解
2.在C#中,下列代码的运行结果是( )。 int []num = new int[5]{1,3,2,0,0} Array,Reverse(num); foreach(int i in num){ Console.Write(i); } 00231 3.C#的数据类型有 Page33 4.在“int[ , ,] B=new...
该资源可以取代本人之前上次的VB.net...3再如一个Label控件,其Text为“数量”,那么可以把其Name命名为lbl_Count,如果其Text为“0123”可变数字类,则把其Tag设为0,控件则跳过其翻译,所有的控件都支持Tag这个判断。
C#.NET中导入Excel文件 C#.NET中导入Excel文件 积分是CSDN自动加的,原始积分是0分。
新版更透彻阐述了C#3,0新功能(包括自动属性、扩展方法、匿名类型等)和.NET 3.5的最新特性(包括LINQ、WPF、WCF和WF等相关技术)。附录中包括了COM与.NET的互操作和Mono发等主题。 与同类图书不同。全书由世界...
Book Description Publication Date: February 24 2014 | ISBN 10: 1118833031 | ISBN 13:...re a C# guru or transitioning from C C++ staying up to date is critical to your success Professional C# 5 0 a [更多]
c# vb.net中DataGridView 表格半透明自定义设定0-255 支持使用背景图片