Как я могу изменить размер массива строк динамически с функциями? C # - PullRequest
0 голосов
/ 29 октября 2019
public static void aktar(string [] dizi)
{
  dizi = new string[5];
}

static void Main(string [] args)
{
  string [] dizi = new string[3];
  Console.WriteLine(dizi.Length);
  aktar(dizi);
  Console.WriteLine(dizi.Length);
  ...

Я хочу, чтобы вывод был:

3
5

, но я получаю результат:

3
3

Как я могу решить проблему?

Ответы [ 3 ]

4 голосов
/ 30 октября 2019

Возможно, вы захотите использовать параметр ref:

public static void aktar(ref string [] dizi)
{
    dizi = new string[5];
}

Затем вызовите его как:

...
aktar(ref dizi);
...

, и он передаст ссылку , поэтомуон изменяет версию звонящего.

1 голос
/ 30 октября 2019

A. Новый массив

aktar не расширяет массив - он создает новый.

public static void aktar(string [] dizi)
{
  dizi = new string[5];
}

Вы можете использовать ref в качестве steve-friedl предлагаемого или вернуть новый массив:


public static string[] aktar(string [] dizi)
{
  return new string[5];
}
(...)
dizi = aktar(dizi); 

Оба подхода не имеют большого смысла, хотя вы теряете оригиналданные.

B. Переключение на List<string>

List<T> идеально подходит для хранения данных, когда количество предметов может измениться.

public static void aktar(List<string> dizi)
{
  dizi.Add("x");
  dizi.Add("y");
}

static void Main(string [] args)
{
  var dizi = new List<string>{"a","b","c"};
  Console.WriteLine(dizi.Count);
  aktar(dizi);
  Console.WriteLine(dizi.Count);
  ...

List test

Code

public static void aktar(List<string> dizi)
{
  dizi.Add("x");
  dizi.Add("y");
}

static void Main(string [] args)
{
  var dizi = new List<string>{"a","b","c"};
  Console.WriteLine(dizi.Count);
  Console.WriteLine(string.Join(",", dizi));
  aktar(dizi);
  Console.WriteLine(dizi.Count);
  Console.WriteLine(string.Join(",", dizi));
}

Выход

3
a,b,c
5
a,b,c,x,y
0 голосов
/ 30 октября 2019

Более случайное решение для мира ООП состоит в том, чтобы установить ваш массив как поле или свойство, чтобы оно было ссылкой:

string [] Dizi { get; set; }

, чтобы вы могли создать метод

void aktar() {
  Dizi = new string[5];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...