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

本文关键字:数组 一个 C#LINQ | 更新日期: 2023-09-27 18:29:20

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

谢谢你的帮助!

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

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

最简单的方法是稍微更改一下表达式。首先转换为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);

您的示例代码似乎非常复杂,无法匹配条件

使用您的代码

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

为什么不:

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

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

string finalList = items + "," + itemToAdd;

CCD_ 6在级联中被自动转换为CCD_。

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

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

我不明白为什么要使用String转换为Array转换为String。。?这就是你需要的吗?

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

我使用'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,将它们显示为View:中的select选项

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)