【问题标题】:How to declare an array of an object statically如何静态声明对象数组
【发布时间】:2011-05-23 18:23:03
【问题描述】:

我是一名长期的 C 程序员,但对 C# 很陌生。我想声明一个对象,然后创建一个静态填充该对象的数组(我有一个非常大的表要输入)。例如

class MyObject {
    int i1;
    string s1;
    double d1;
};

static MyObject[] myO = new MyObject {{1,"1",1.0}, {2,"2",2.0}};

这不起作用,但你明白了。任何帮助表示赞赏。

【问题讨论】:

标签: c# arrays object static


【解决方案1】:

假设您的班级有公共字段/属性:

class MyObject
{
    public int i1 { get; set; }
    public string s1 { get; set; }
    public double d1 { get; set; }
}   // note: no semicolon needed here

static MyObject[] myO = { new MyObject { i1 = 1, s1 = "1", d1 = 1.0 },
                          new MyObject { i1 = 2, s1 = "2", d1 = 2.0 },
                        };

【讨论】:

  • 感谢这样做。它的测试(剪切和粘贴)比 C 多得多,但我明白了。
  • 如果 myobject 内部有另一个对象数组怎么办?
【解决方案2】:

您需要用对象实例填充数组。

创建一个带参数的构造函数,然后编写

new MyObject[] { new MyObject(a, b, c), new MyObject(d, e, f) }

【讨论】:

    【解决方案3】:

    你必须用新的对象实例初始化数组。

    class MyObject 
    {
        int i1;
        string s1;
        double d1;
    
        public MyObject(int i, string s, double d)
        {
            i1 = i;
            s1 = s;
            d1 = d;
        }
    };
    
    static MyObject[] myO = new MyObject[] { 
        new MyObject(1, "1", 1.0), 
        new MyObject(2, "2", 2.0)
    };
    

    不幸的是,没有办法像为内置类型或字典的数组一样指定自定义初始化程序。对于我的意思的(未来)参考:

    int[] arr = { 1, 2, 3, 4 };
    var list = new List<string> { "abc", "def" };
    var dict = new Dictionary<string, int> { { "abc", 1 }, { "def", 2 } };
    

    【讨论】:

      【解决方案4】:

      您需要实例化数组中的对象:

      static MyObject[] myO = new MyObject
      {
         new MyObject { i1 = 1, s1 = "1", d1 = 1.0 },
         new MyObject { i1 = 2, s1 = "2", d1 = 2.0 },
      };
      

      【讨论】:

      • MyObject 有 3 个私有字段,所以除非你做某事,否则这将不起作用
      • 好点;在这种情况下,他要么需要使用 setter 公开属性,要么添加一个接受这些值的构造函数。
      【解决方案5】:

      这正是您想要的,但您可以使用以下代码实现您的目标:

      class MyObject
      {
          public int i1;
          public string s1;
          public double d1;
      };
      
      static MyObject[] myO = new[]  { new MyObject { i1=1, s1="1", d1=1.0 }, new MyObject { i1=2, s1="2", d1=2.0 } };
      

      【讨论】:

        【解决方案6】:

        我在这里看到了一些问题。首先,您的所有变量都是私有的。其次,您没有调用构造函数。

            class MyObject
            {
                public MyObject(int i1, string s1, double d1)
                {
                    this.i1 = i1;
                    this.s1 = s1;
                    this.d1 = d1;
                }
        
                int i1;
                string s1;
                double d1;
            };
        
            static MyObject[] objects = new MyObject[] { new MyObject(1, "2", 3), new MyObject(1, "2", 3) };
        

        【讨论】:

          【解决方案7】:

          试试

          class Foo
          {
            public static Widget[] Widgets { get ; private set ; }
            static Foo()
            {
              Widgets = new Widget[]{ new Widget(1) , new Widget(2) , ... } ;
            }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-08-12
            • 2013-03-22
            • 1970-01-01
            • 2020-08-10
            • 2014-08-04
            • 2013-01-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多