在类中定义struct时,如何初始化struct成员?

时间:2014-10-30 10:21:22

标签: c#

使用c#我想在一个结构中设置变量,该结构是该类的一个成员。对c#来说很新。帮助赞赏。

class myclass
{
   public struct mystruct
   {
       public int something;
   }

   public void init() 
   {
      mystruct.something = 20; // <-- this is an error
   }

   static void Main(string[] args)
   {
       myclass c = new myclass();
       c.init();          
   }
}

错误:&#39;非静态字段,方法或属性需要对象引用myclass.mystruct.something&#39;

6 个答案:

答案 0 :(得分:4)

mystruct是类中的类型,但您没有该类型的任何字段:

class myclass
{
   public struct mystruct
   {
       public int something;
   }

   private mystruct field;

   public void init() 
   {
      field.something = 20; // <-- this is no longer an error :)
   }

   static void Main(string[] args)
   {
       myclass c = new myclass();
       c.init();          
   }
}

答案 1 :(得分:2)

struct definition和struct instance之间存在差异。您需要首先实例化mystruct,然后您可以为其赋值 - 或者将mystruct声明为静态字段。

public struct mystruct
{
  public int something;
}

var foo = new mystruct();
foo.something = 20;

public struct mystruct
{
  public static int something;
}

mystruct.something = 20;

答案 2 :(得分:1)

您应该为mystruct

创建一个对象
public void init() 
{
  mystruct m = new mystruct();
  m.something = 20; 
}

答案 3 :(得分:1)

public struct mystruct
{
   public int something;
}

这只是一个定义。如错误所述,您必须具有初始化对象才能使用实例变量。

class myclass
{
   public struct mystruct
   {
       public int something;
   }

   public void init() 
   {
      mystruct haha = new mystruct();
      haha.something = 20; // <-- modify the variable of the specific instance
   }

   static void Main(string[] args)
   {
       myclass c = new myclass();
       c.init();          
   }
}

答案 4 :(得分:1)

class myclass
{
  mystruct m_mystruct;

   public void init() 
   {
      m_mystruct.something = 20; 
   }

   static void Main(string[] args)
   {
       myclass c = new myclass();
       c.init();          
   }
}

 public struct mystruct
   {
       public int something;
   }

答案 5 :(得分:1)

哇,太神奇了!

我敢打赌,大多数(如果不是全部)都会指出你不仅会将Type与实例混淆,而且也不会以推荐的方式使用Struct ..

您应该仅将结构用作不可变结果,这意味着您应该创建所有成员readonly并仅在构造函数中设置它们!

class myclass
{
  mystruct oneMyStruct;

  public struct mystruct
  {
    public readonly int something;
    public mystruct(int something_) { something = something_; }
  }

  public void init()
  {
    oneMyStruct = new mystruct(20);
  }

  static void Main(string[] args)
  {
    myclass c = new myclass();
    c.init();
  }

}

如果你需要对成员的读写访问,你不应该使用struct而是类!