社区
C#
帖子详情
能否直接比较两个结构体
大狗狗
2009-01-09 09:37:42
如:struct A{...}
A a1,a2;
if(a1==a2)//看看两个结构体对象的所有成员值是否对应相等
{}
这样能不能比较?还是我需要逐一比较两个结构体中的每个成员?
...全文
2698
17
打赏
收藏
能否直接比较两个结构体
如:struct A{...} A a1,a2; if(a1==a2)//看看两个结构体对象的所有成员值是否对应相等 {} 这样能不能比较?还是我需要逐一比较两个结构体中的每个成员?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
可以 就是你理解的那样 "两个结构体对象的所有成员值是否对应相等"
比较
两个
结构体
是否相等
本文探讨了使用memcmp函数
比较
结构体
的局限性,由于
结构体
内存对齐导致的字节填充使得
直接
比较
不可行。介绍了通过重载==运算符来正确
比较
两个
结构体
的方法。
结构体
变量之间的
比较
和赋值原理
本文探讨了C语言中
结构体
变量的
比较
和赋值。
结构体
不能
直接
进行
比较
,但可以使用memcmp()函数进行内存
比较
。然而,这种方法存在填充字段问题和对包含字符串或指针的
结构体
的处理问题。
结构体
赋值实际上是内存拷贝,包括填充字段。示例代码展示了
结构体
赋值过程中填充字段的影响。
面试题:
两个
相同struct的变量能否用memcmp
比较
?
面试中遇到的问题,关于使用memcmp
比较
两个
结构体
变量是否相等。由于
结构体
内部可能存在不同类型的成员,导致字节对齐问题,使得
直接
用memcmp可能无法正确判断
结构体
是否相等。示例代码显示,即使
结构体
A和B的某个成员相同,但由于内存初始化差异,整体上它们通常是不相等的。因此,不应依赖memcpy来
比较
结构体
内容。
C语言
结构体
struct的
比较
本文解析了
结构体
比较
的限制,特别是当
结构体
大小一致但内容不同时,由于字节对齐导致的
比较
无意义。通过实例展示了如何理解
结构体
的可比性,并揭示了相同
结构体
比较
的条件。
如何
比较
golang中的
结构体
是否相等
本文探讨了Go语言中
结构体
的值
比较
与指针
比较
,以及不同类型之间的转换。强调了简单类型如整型、浮点型、字符串等可以
直接
使用`==`进行
比较
,而复杂类型如Slice、Map等则不能
直接
比较
。同时,展示了如何在
结构体
之间进行转换,并通过示例代码说明了转换后的
结构体
可以使用`==`进行值
比较
。文章还提及了
结构体
中包含不可
比较
类型的限制及其在实际编程中的应用。
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章