C#LINQ将一个项追加到数组的末尾

时间:2012-03-29 15:18:19

标签: c# linq

我有一个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

感谢您的帮助!

7 个答案:

答案 0 :(得分:15)

尝试items.Concat(new[] { itemToAdd });

答案 1 :(得分:9)

最简单的方法是改变你的表情。首先转换为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 :(得分: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);

答案 3 :(得分:1)

为什么不:

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

答案 4 :(得分:0)

为什么不直接将项目添加为string

string finalList = items + "," + itemToAdd;

int会自动转换为连接中的string

如果items可以是null或为空,则将表达式更改为

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

答案 5 :(得分:0)

我不明白你为什么用String转换成一个转换成String的数组..? 这可能是你需要的吗?

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

答案 6 :(得分:0)

我使用'union'创建一个新数组,在这种情况下,新元素在开头:

class HelperX {
    /// <summary>
    /// Tenemos varios campos tipo bandera, cuyo valor puede ser 'S' = Sí o 'N' = No
    /// </summary>
    static public KeyValuePair<string, string>[] SiNo
    {
        get
        {
            return new KeyValuePair<string, string>[]
            {
                new KeyValuePair<string, string>( "S", "Sí"),
                new KeyValuePair<string, string>( "N", "No")
            };
        }
    }

    /// <summary>
    /// Tenemos varios campos tipo bandera, cuyo valor puede ser 'T' = 'Todos', 'S' = Sí o 'N' = No
    /// </summary>
    static public KeyValuePair<string, string>[] SiNoTodos
    {
        get
        {
            var todos = new KeyValuePair<string, string>[]
            {
                new KeyValuePair<string, string>( "T", "Todos"),
            }.Union(SiNo);

            return todos.ToArray();
        }
    }
}

此外,我可以创建一个selectListItem,以将其显示为视图中的选择选项:

ViewBag.SeleccionSiNoTodos = HelperX.SiNoTodos
  .Select(kv => new SelectListItem() { 
          Value = kv.Key, 
          Text = kv.Value, 
          Selected = seleccionados?.Contains(kv.Key) == true })
  .ToList();

最后,在视图中,我可以使用以下方法获得“选择”选项列表:

@Html.DropDownList("SeleccionSiNoTodos", (IEnumerable<SelectListItem>)ViewBag.SeleccionSiNoTodos)