2012-03-29 3 views
3

У меня есть массив int []. Мне нужно взять int и добавить его в конец массива, не затрагивая позицию других элементов в этом массиве. Используя C# 4 и LINQ, что является самым изящным способом достижения этого?C# 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 

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

+2

почему вы не просто сделать 'finalList = activeList.Append ("" + ddlDisabledTypes.SelectedValue)'? –

+0

'items.Add (itemToAdd);' ??? – Bridge

+0

items.Add (itemToAdd); Не работает: «Система.Array 'не содержит определения для «Добавить», и не может быть найден метод расширения «Добавить», принимающий первый аргумент типа «System.Array» (вам не хватает директивы using или ссылки на сборку?) – Jared

ответ

8

Самый простой способ - немного изменить свое выражение. Сначала конвертируйте в 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); 
+0

Последний пример - лучший пример. Большое спасибо за Вашу помощь! – Jared

12

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

0

Почему бы не просто добавить товар, как: string?

string finalList = items + "," + itemToAdd; 

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

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

string finalList = String.IsNullOrEmpty(items) ? 
        itemToAdd.ToString() : items + "," + itemToAdd; 
+1

Что произойдет, если элементы пустые? –

+0

Я не знаю деталей логики OP. Из-за этого он должен был бы проверить этот случай, если предметы могут быть пустыми. –

0

Я не вижу, почему вы используете строку, преобразованную в массив преобразуется в строку ..? Это может быть то, что вам нужно?

string finalList = activeList + "," + ddlDisabledTypes.SelectedValue; 
1

Почему нет:

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

EDIT:

А дальше, если вы хотите иметь массив междунар:

int[] array = items.ToArray(); 
2

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

используя код

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);