能否直接比较两个结构体

大狗狗 2009-01-09 09:37:42
如:struct A{...}

A a1,a2;

if(a1==a2)//看看两个结构体对象的所有成员值是否对应相等
{}

这样能不能比较?还是我需要逐一比较两个结构体中的每个成员?
...全文
2494 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
大狗狗 2009-01-11
  • 打赏
  • 举报
回复
感谢所有人回贴!
wsf205 2009-01-09
  • 打赏
  • 举报
回复
哈哈,楼主的小经验很受用
lunat 2009-01-09
  • 打赏
  • 举报
回复
对结构体定义 StructLayout属性
对每一个成员定义FieldOffset属性
yhy0611 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 alan001 的回复:]
不能

要逐一比较,或者干脆进行内存块比较
[/Quote]

弱弱的问一句,怎么进行内存块比较啊?
大狗狗 2009-01-09
  • 打赏
  • 举报
回复
哈哈,这么多人回贴,感谢大家的关照!

小弟已有所感悟:

不能直接比较,试想你的结构体比较复杂,其中包含了字符数组---C#可不知道如何比较两个字符数组的内容。因为它根本就不知道你住字符数组中实际写了多少个字符。实际上我要是在结构体中放了字符数组,同时还要放个变量记录数组中字符个数。这样才能在使用时转换为需要的string.

重载 == ?C# 主张语法从简,重载运算符这个麻烦的东西就不要用了。


我的解决办法是:在结构体中添加一个 public bool Equal(struct obj)成员函数。其参数就是同类结构体对象。

将this成员与参数对象的成员逐一比较(或按个人需要比较),返回true或false


嘿嘿--就这么干了

最后分享个小经验:本人这所以用结构体是因为认为其对象位于栈中要比放在堆中的类对象速度快,但后来发现由于结构体是值类型,使用中涉及到了装箱拆箱操作,而装箱拆箱过程中发现无法更改结构体成员,网上找资料说是什么云云。。总之是装箱拆箱造成的。

最后小弟把结构体改成类了--很简单:struct改成class即可

看来-- 使用结构体要谨慎啊


tiger999 2009-01-09
  • 打赏
  • 举报
回复
用 Equals 就是字段与字段的比较。

不过有限制, 结构体内的字段不能是引用类型
如果字段是引用类型,那么引用类型字段的比较是用 Object.ReferenceEquals 实现的。 出来的可能不是你想要的。
再见品月 2009-01-09
  • 打赏
  • 举报
回复
把结构体内的每个成员一一对应着用equals比较有问题吗?

结构体内存的是什么我不能用equals比较了?int,string。。不能用么?

难道里面还存着个结构体。。搞笑
再见品月 2009-01-09
  • 打赏
  • 举报
回复
虚心学习。。呵呵。。接受大佬批评。。。回家了试验下。。
qimini 2009-01-09
  • 打赏
  • 举报
回复
比较默认就可以比较,但是比较出来的结果可能不是你想要的

如果需要比较,那么请重载操作符,同样对于其他自定义托管对象类型也适用
vrhero 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 luckyp 的回复:]
不能。。。结构体可以理解成两个对象
还是比较复杂的对象。。

所以没法直接比较。。不过可以拆了比较。。看里面的所有成员是否相等。。。
[/Quote]
乱讲...你用Equals试试,实现==号也不是难事...
再见品月 2009-01-09
  • 打赏
  • 举报
回复
不能。。。结构体可以理解成两个对象
还是比较复杂的对象。。

所以没法直接比较。。不过可以拆了比较。。看里面的所有成员是否相等。。。
vrhero 2009-01-09
  • 打赏
  • 举报
回复
呵呵...我也错了,只能用Equals...自定义的struct ==号要自己实现...
lunat 2009-01-09
  • 打赏
  • 举报
回复
不好意思 我错了....
这个是不能直接进行==运算的...除非你自己定义运算符...

检讨一下,想当然了 .... 555
sunrobust 2009-01-09
  • 打赏
  • 举报
回复
可以, 2楼说的很对.
alan001 2009-01-09
  • 打赏
  • 举报
回复
不能

要逐一比较,或者干脆进行内存块比较
vrhero 2009-01-09
  • 打赏
  • 举报
回复
struct是值类型,比较的就是值...但是要注意结构成员不能是引用类型,string除外...
lunat 2009-01-09
  • 打赏
  • 举报
回复
可以 就是你理解的那样 "两个结构体对象的所有成员值是否对应相等"

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧