我的问题是这个问题的一部分:
我从一个表单中收到了一个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);
}
Run Code Online (Sandbox Code Playgroud)
vcs*_*nes 359
listofIDs.Select(int.Parse).ToList()
Run Code Online (Sandbox Code Playgroud)
Col*_*inE 38
使用Linq ......
List<string> listofIDs = collection.AllKeys.ToList();
List<int> myStringList = listofIDs.Select(s => int.Parse(s)).ToList();
Run Code Online (Sandbox Code Playgroud)
Oli*_*bes 17
这是一个过滤掉无效int 的安全变体:
List<int> ints = strings
.Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
.Where(n => n.HasValue)
.Select(n => n.Value)
.ToList();
Run Code Online (Sandbox Code Playgroud)
它使用out
C#7.0引入的新变量.
此另一个变量返回一个可为空的int列表,其中null
为无效的int插入条目(即它保留原始列表计数):
List<int?> nullableInts = strings
.Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
.ToList();
Run Code Online (Sandbox Code Playgroud)
Ste*_*bbs 13
使用Linq:
var intList = stringList.Select(s => Convert.ToInt32(s)).ToList()
Run Code Online (Sandbox Code Playgroud)
BA *_*ber 12
什么没有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();
Run Code Online (Sandbox Code Playgroud)
感谢Olivier Jacot-Descombes的想法和C#7.0版本.
我知道这是旧帖子,但我认为这是一个很好的补充:您可以使用 List<T>.ConvertAll<TOutput>
List<int> integers = strings.ConvertAll(s => Int32.Parse(s));
Run Code Online (Sandbox Code Playgroud)