none
请教:怎样比较结构为空。 RRS feed

答案

  • 你好!
         如果struct的定义已经无法修改了,你可以先新建一个struct实例,保证所有的成员为初始值(值类型不存在null的语义),然后使用Equals()方法来比较,这个方法效率十分低下,一般来说值类型的定义中应该重写这个方法的,但是显然定义这个struct的程序员不是很有经验!
            public struct MyValType
            {
                public int x;
                public MyValType(int i)
                {
                    x = i;
                }
            }
          MyValType v1 = new MyValType();
          MyValType v2 = new MyValType(3);
          MyValType v3=new MyValType();
          if (v2.Equals(v1))
                  Console.WriteLine("v2为初始值");
          if (v3.Equals(v3))
                  Console.WriteLine("v3为初始值");
    周雪峰
    2010年1月22日 8:00
    版主

全部回复

  • 结构是值类型是不会为空的
    你可以通过Nullable<T>

    比如 MyStruct? ms;
    if(!ms.HasValule)//如果为空
    {
    ms=new MyStruct();
    }
    Memory all alone in the moonlight~My Blog in .NET~~~
    2010年1月22日 4:54
    版主
  • 谢谢指点:这个HasValule属性在WM 中不能用还有其它的吗?


    tfnpghl
    2010年1月22日 5:16
  • 你好!
         重载==运算符,然后自己来定义一个比较!实际上struct和null,我写过一篇文章,你可以参考一下:
    http://www.cnblogs.com/xuefeng1982/archive/2009/11/13/1602358.html
    周雪峰
    2010年1月22日 5:34
    版主
  • 我看了您的代码,非常好感谢。
    但是我与您所说的不一样,我的结构是从内存中读取过来的,结构体是固定的,不能再加代码,如下:


    与内存块中一样的结构体= CType(Marshal.PtrToStructure(内存结构指针, GetType(与内存块中一样的结构体)), 与内存块中一样的结构体)

    if 与内存块中一样的结构体 <>空 then
    end if
    tfnpghl
    2010年1月22日 7:10
  • 你好!
         如果struct的定义已经无法修改了,你可以先新建一个struct实例,保证所有的成员为初始值(值类型不存在null的语义),然后使用Equals()方法来比较,这个方法效率十分低下,一般来说值类型的定义中应该重写这个方法的,但是显然定义这个struct的程序员不是很有经验!
            public struct MyValType
            {
                public int x;
                public MyValType(int i)
                {
                    x = i;
                }
            }
          MyValType v1 = new MyValType();
          MyValType v2 = new MyValType(3);
          MyValType v3=new MyValType();
          if (v2.Equals(v1))
                  Console.WriteLine("v2为初始值");
          if (v3.Equals(v3))
                  Console.WriteLine("v3为初始值");
    周雪峰
    2010年1月22日 8:00
    版主
  • 谢谢


    tfnpghl
    2010年1月23日 9:18
  • 不客气啊!
    周雪峰
    2010年1月23日 9:25
    版主