如:struct A{...}A a1,a2;if(a1==a2)//看看两个结构体对象的所有成员值是否对应相等
{}这样能不能比较?还是我需要逐一比较两个结构体中的每个成员?

解决方案 »

  1.   

    struct是值类型,比较的就是值...但是要注意结构成员不能是引用类型,string除外...
      

  2.   

    呵呵...我也错了,只能用Equals...自定义的struct ==号要自己实现...
      

  3.   

    乱讲...你用Equals试试,实现==号也不是难事...
      

  4.   

    把结构体内的每个成员一一对应着用equals比较有问题吗?结构体内存的是什么我不能用equals比较了?int,string。。不能用么?难道里面还存着个结构体。。搞笑
      

  5.   

    用 Equals  就是字段与字段的比较。不过有限制, 结构体内的字段不能是引用类型
    如果字段是引用类型,那么引用类型字段的比较是用 Object.ReferenceEquals 实现的。 出来的可能不是你想要的。
      

  6.   

    对结构体定义 StructLayout属性
    对每一个成员定义FieldOffset属性
      

  7.   

    哈哈,这么多人回贴,感谢大家的关照!小弟已有所感悟:不能直接比较,试想你的结构体比较复杂,其中包含了字符数组---C#可不知道如何比较两个字符数组的内容。因为它根本就不知道你住字符数组中实际写了多少个字符。实际上我要是在结构体中放了字符数组,同时还要放个变量记录数组中字符个数。这样才能在使用时转换为需要的string.重载 == ?C# 主张语法从简,重载运算符这个麻烦的东西就不要用了。
    我的解决办法是:在结构体中添加一个 public bool Equal(struct obj)成员函数。其参数就是同类结构体对象。将this成员与参数对象的成员逐一比较(或按个人需要比较),返回true或false
    嘿嘿--就这么干了最后分享个小经验:本人这所以用结构体是因为认为其对象位于栈中要比放在堆中的类对象速度快,但后来发现由于结构体是值类型,使用中涉及到了装箱拆箱操作,而装箱拆箱过程中发现无法更改结构体成员,网上找资料说是什么云云。。总之是装箱拆箱造成的。最后小弟把结构体改成类了--很简单:struct改成class即可看来-- 使用结构体要谨慎啊