Как объявить массив объекта статически - PullRequest
3 голосов
/ 23 мая 2011

Я долгое время программист на C, но плохо знаком с C #. Я хочу объявить объект, а затем создать массив этого объекта, заполнив его статически (у меня есть очень большая таблица для ввода). Например

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

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

Это не работает, но вы поняли идею. Любая помощь приветствуется.

Ответы [ 7 ]

8 голосов
/ 23 мая 2011

Если у вас есть открытые поля / свойства в вашем классе:

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 },
                        };
3 голосов
/ 23 мая 2011

Вам придется инициализировать массив новыми экземплярами объекта.

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 } };
3 голосов
/ 23 мая 2011

Вам необходимо заполнить массив экземплярами объекта.

Создать конструктор, который принимает параметры, затем написать

new MyObject[] { new MyObject(a, b, c), new MyObject(d, e, f) }
2 голосов
/ 23 мая 2011

Вам нужно создать экземпляры объектов в массиве:

static MyObject[] myO = new MyObject
{
   new MyObject { i1 = 1, s1 = "1", d1 = 1.0 },
   new MyObject { i1 = 2, s1 = "2", d1 = 2.0 },
};
1 голос
/ 23 мая 2011

Я вижу несколько вещей не так здесь.Во-первых, все ваши переменные являются частными.Во-вторых, вы не вызываете конструктор.

    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) };
0 голосов
/ 23 мая 2011

Это именно то, что вы хотите, но вы можете достичь своей цели с помощью следующего кода:

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 } };
0 голосов
/ 23 мая 2011

Попробуйте

class Foo
{
  public static Widget[] Widgets { get ; private set ; }
  static Foo()
  {
    Widgets = new Widget[]{ new Widget(1) , new Widget(2) , ... } ;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...