我的问题是这个问题的一部分:
我从表单中收到一组ID。我需要获取密钥,将它们转换为整数并从数据库中选择匹配的记录。
[HttpPost]
public ActionResult Report(FormCollection collection)
{
var listofIDs = collection.AllKeys.ToList();
// List<string> to List<int>
List<Dinner> dinners = new List<Dinner>();
dinners= repository.GetDinners(listofIDs);
return View(dinners);
}
答案 0 :(得分:336)
listofIDs.Select(int.Parse).ToList()
答案 1 :(得分:37)
使用Linq ...
List<string> listofIDs = collection.AllKeys.ToList();
List<int> myStringList = listofIDs.Select(s => int.Parse(s)).ToList();
答案 2 :(得分:14)
以下是安全变体,用于过滤掉无效的整数:
List<int> ints = strings
.Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
.Where(n => n.HasValue)
.Select(n => n.Value)
.ToList();
它使用C#7.0引入的新out
变量。
此另一个变量返回一个可为空的int列表,其中为无效的int插入null
个条目(即保留原始列表计数):
List<int?> nullableInts = strings
.Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
.ToList();
答案 3 :(得分:13)
使用Linq:
var intList = stringList.Select(s => Convert.ToInt32(s)).ToList()
答案 4 :(得分:9)
什么没有TryParse? 过滤掉无效整数的安全LINQ版(适用于C#6.0及以下版本):
List<int> ints = strings
.Select(s => { int i; return int.TryParse(s, out i) ? i : (int?)null; })
.Where(i => i.HasValue)
.Select(i => i.Value)
.ToList();
感谢Olivier Jacot-Descombes的想法和C#7.0版本。
答案 5 :(得分:3)
我知道这是旧帖子,但我认为这是一个很好的补充:
您可以使用List<T>.ConvertAll<TOutput>
HR_EMPMAST.JOBCODE
答案 6 :(得分:1)
将字符串值转换为整数列表
var myString = "010";
int myInt;
List<int> B = myString.ToCharArray().Where(x => int.TryParse(x.ToString(), out myInt)).Select(x => int.Parse(x.ToString())).ToList();
答案 7 :(得分:0)
这是最简单的方法,我认为:
var listOfStrings = (new [] { "4", "5", "6" }).ToList();
var listOfInts = listOfStrings.Select<string, int>(q => Convert.ToInt32(q));
答案 8 :(得分:0)
实现此目的的另一种方法是使用linq语句。推荐的答案在.NetCore2.0中对我不起作用。我能够弄清楚但是如果你使用更新的技术,下面也会有效。
[HttpPost]
public ActionResult Report(FormCollection collection)
{
var listofIDs = collection.ToList().Select(x => x.ToString());
List<Dinner> dinners = new List<Dinner>();
dinners = repository.GetDinners(listofIDs);
return View(dinners);
}
答案 9 :(得分:0)
yourEnumList.Select(s => (int)s).ToList()
答案 10 :(得分:0)
您可以通过LINQ使用它
var selectedEditionIds = input.SelectedEditionIds.Split(",").ToArray()
.Where(i => !string.IsNullOrWhiteSpace(i)
&& int.TryParse(i,out int validNumber))
.Select(x=>int.Parse(x)).ToList();
答案 11 :(得分:0)
intList = Array.ConvertAll(stringList, int.Parse).ToList();
答案 12 :(得分:0)
对于这个简单的问题,这可能是多余的。但是对于与Linq有关的Try-Do方法,我倾向于使用匿名类来表达更具表现力的代码。它类似于Olivier Jacot-Descombes和BA TabNabber的答案:
List<int> ints = strings
.Select(idString => new { ParseSuccessful = Int32.TryParse(idString, out var id), Value = id })
.Where(id => id.ParseSuccessful)
.Select(id => id.Value)
.ToList();
答案 13 :(得分:-1)
public List<int> ConvertStringListToIntList(List<string> list)
{
List<int> resultList = new List<int>();
for (int i = 0; i < list.Count; i++)
resultList.Add(Convert.ToInt32(list[i]));
return resultList;
}