我有一个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
感谢您的帮助!
答案 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)