C # LINQ добавить элемент в конец массива - PullRequest
5 голосов
/ 29 марта 2012

У меня есть массив int []. Мне нужно взять int и добавить его в конец массива, не влияя на положение других элементов в этом массиве. Используя C # 4 и LINQ, какой самый элегантный способ добиться этого?

Мой код:

 int[] items = activeList.Split(',').Select(n => Convert.ToInt32(n)).ToArray();
 int itemToAdd = ddlDisabledTypes.SelectedValue.ToInt(0);

 // Need final list as a string
 string finalList = X

Спасибо за любую помощь!

Ответы [ 6 ]

15 голосов
/ 29 марта 2012

Попробуйте items.Concat(new[] { itemToAdd });.

9 голосов
/ 29 марта 2012

Самый простой способ - немного изменить свое выражение.Сначала преобразуйте в List<int>, затем добавьте элемент и затем преобразуйте в массив.

List<int> items = activeList.Split(',').Select(n => Convert.ToInt32(n)).ToList();
int itemToAdd = ddlDisabledTypes.SelectedValue.ToInt(0);
items.Add(itemToAdd);

// If you want to see it as an actual array you can still use ToArray
int[] itemsAsArray = items.ToArray();

На основании вашей последней строки, хотя кажется, что вы хотите вернуть всю информацию в виде значения string.Если это так, то вы можете сделать следующее

var builder = new StringBuilder();
foreach (var item in items) {
  if (builder.Length != 0) {
    builder.Append(",");
  }
  builder.Append(item);
}
string finalList = builder.ToString();

Если общая цель состоит в том, чтобы просто добавить еще один элемент в конец строки, то гораздо эффективнее сделать это напрямую, вместо преобразования в int коллекция, а затем обратно в строку.

int itemToAdd = ddlDisabledTypes.SelectedValue.ToInt(0);
string finalList = String.IsNullOrEmpty(activeList)
  ? itemToAdd.ToString()
  : String.Format("{0},{1}", activeList, itemToAdd);
2 голосов
/ 29 марта 2012

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

с использованием вашего кода

List<int> items = activeList.Split(',').Select(n => Convert.ToInt32(n)).ToList();  
items.Add(ddlDisabledTypes.SelectedValue.ToInt(0));  

string finalList = String.Join(',',items.ToArray());

Просто манипулирование строкой

int itemToAdd = ddlDisabledTypes.SelectedValue.ToInt(0);  
string finalList = String.IsNullOrWhiteSpace(activeList) ? 
                                           itemToAdd.ToString() :
                                           itemToAdd + string.format(",{0}",itemToAdd);
1 голос
/ 29 марта 2012

Почему бы и нет:

 List<int> items = activeList.Split(',').Select(n => Convert.ToInt32(n)).ToList();
 int itemToAdd = ddlDisabledTypes.SelectedValue.ToInt(0);
 items.Add(itemToAdd);

РЕДАКТИРОВАТЬ:

И далее, если вы хотите иметь массив int:

int[] array = items.ToArray();
0 голосов
/ 29 марта 2012

Не понимаю, почему вы используете строку, преобразованную в массив, преобразованный в строку ..? Может ли это быть то, что вам нужно?

string finalList = activeList + "," + ddlDisabledTypes.SelectedValue;
0 голосов
/ 29 марта 2012

Почему бы просто не добавить элемент как string напрямую?

string finalList = items + "," + itemToAdd;

int автоматически преобразуется в string в конкатенациях.

, если items может быть null или пусто, затем измените выражение на

string finalList = String.IsNullOrEmpty(items) ? 
                     itemToAdd.ToString() : items + "," + itemToAdd;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...