Инициализировать массив (строку или любой другой тип данных) внутри структуры - PullRequest
2 голосов
/ 08 июня 2011

Я ищу это в C #.

public struct Structure1
{ string string1 ;            //Can be set dynamically
  public string[] stringArr; //Needs to be set dynamically
}

В общем, как нужно динамически инициализировать массив, если это необходимо?Проще говоря, я пытаюсь добиться этого в C #:

  int[] array;  
  for (int i=0; i < 10; i++) 
        array[i] = i;  

Другой пример:

  string[] array1;  
      for (int i=0; i < DynamicValue; i++) 
            array1[i] = "SomeValue";

Ответы [ 3 ]

3 голосов
/ 08 июня 2011

Во-первых, ваш код будет почти работать:

int[] array = new int[10]; // This is the only line that needs changing  
for (int i=0; i < 10; i++) 
    array[i] = i; 

Вы можете потенциально инициализировать свои массивы в вашей структуре, добавив пользовательский конструктор, а затем инициализировать его, вызывая конструктор при создании структуры.Это потребуется для класса.

При этом я настоятельно рекомендую использовать здесь класс, а не структуру.Изменяемые структуры - это плохая идея, а структуры, содержащие ссылочные типы, также очень плохая идея.


Редактировать:

Если вы пытаетесь создать коллекцию с динамической длиной, вы можете использовать List<T> вместо массива:

List<int> list = new List<int>();
for (int i=0; i < 10; i++) 
    list.Add(i);

// To show usage...
Console.WriteLine("List has {0} elements.  4th == {1}", list.Count, list[3]); 
1 голос
/ 08 июня 2011
int[] arr = Enumerable.Range(0, 10).ToArray();

обновление

int x=10;
int[] arr = Enumerable.Range(0, x).ToArray();
0 голосов
/ 08 июня 2011
// IF you are going to use a struct
public struct Structure1
{
    readonly string String1;
    readonly string[] stringArr;
    readonly List<string> myList;

    public Structure1(string String1)
    {
        // all fields must be initialized or assigned in the 
        // constructor


        // readonly members can only be initialized or assigned
        // in the constructor
        this.String1 = String1

        // initialize stringArr - this will also make the array 
        // a fixed length array as it cannot be changed; however
        // the contents of each element can be changed
        stringArr = new string[] {};

        // if you use a List<string> instead of array, you can 
        // initialize myList and add items to it via a public setter
        myList = new List<string>();
    }

    public List<string> StructList
    {
        // you can alter the contents and size of the list
        get { return myList;}
    }
}  
...