能否直接比较两个结构体 如:struct A{...}A a1,a2;if(a1==a2)//看看两个结构体对象的所有成员值是否对应相等{}这样能不能比较?还是我需要逐一比较两个结构体中的每个成员? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 struct是值类型,比较的就是值...但是要注意结构成员不能是引用类型,string除外... 呵呵...我也错了,只能用Equals...自定义的struct ==号要自己实现... 乱讲...你用Equals试试,实现==号也不是难事... 把结构体内的每个成员一一对应着用equals比较有问题吗?结构体内存的是什么我不能用equals比较了?int,string。。不能用么?难道里面还存着个结构体。。搞笑 用 Equals 就是字段与字段的比较。不过有限制, 结构体内的字段不能是引用类型如果字段是引用类型,那么引用类型字段的比较是用 Object.ReferenceEquals 实现的。 出来的可能不是你想要的。 对结构体定义 StructLayout属性对每一个成员定义FieldOffset属性 哈哈,这么多人回贴,感谢大家的关照!小弟已有所感悟:不能直接比较,试想你的结构体比较复杂,其中包含了字符数组---C#可不知道如何比较两个字符数组的内容。因为它根本就不知道你住字符数组中实际写了多少个字符。实际上我要是在结构体中放了字符数组,同时还要放个变量记录数组中字符个数。这样才能在使用时转换为需要的string.重载 == ?C# 主张语法从简,重载运算符这个麻烦的东西就不要用了。我的解决办法是:在结构体中添加一个 public bool Equal(struct obj)成员函数。其参数就是同类结构体对象。将this成员与参数对象的成员逐一比较(或按个人需要比较),返回true或false嘿嘿--就这么干了最后分享个小经验:本人这所以用结构体是因为认为其对象位于栈中要比放在堆中的类对象速度快,但后来发现由于结构体是值类型,使用中涉及到了装箱拆箱操作,而装箱拆箱过程中发现无法更改结构体成员,网上找资料说是什么云云。。总之是装箱拆箱造成的。最后小弟把结构体改成类了--很简单:struct改成class即可看来-- 使用结构体要谨慎啊 新手问题,"可访问性低的问题." 构造函数的问题 C#中用SaveFileDialog类保存文件,如何另外增加字符编码(ANSI、UTF-8等)选项 无论文本框输入的是大写还是小写字符串,显示在文本框里面的字符串都显示为小写? 如何取得鼠标在某控件内的坐标? 一个很菜的问题,希望有人能帮我看看 c#中即时通讯的登录问题 一個小問題,在線等待 如何将byte[*]转为byte[]? DataGrid的专题 菜鸟问滚动 vs2005创建的WEBForm有显示控件,而vs2008 却毛病重重。
如果字段是引用类型,那么引用类型字段的比较是用 Object.ReferenceEquals 实现的。 出来的可能不是你想要的。
对每一个成员定义FieldOffset属性
我的解决办法是:在结构体中添加一个 public bool Equal(struct obj)成员函数。其参数就是同类结构体对象。将this成员与参数对象的成员逐一比较(或按个人需要比较),返回true或false
嘿嘿--就这么干了最后分享个小经验:本人这所以用结构体是因为认为其对象位于栈中要比放在堆中的类对象速度快,但后来发现由于结构体是值类型,使用中涉及到了装箱拆箱操作,而装箱拆箱过程中发现无法更改结构体成员,网上找资料说是什么云云。。总之是装箱拆箱造成的。最后小弟把结构体改成类了--很简单:struct改成class即可看来-- 使用结构体要谨慎啊