如何将List <string>转换为List <int>?

Nik*_*las 150 c#

我的问题是这个问题的一部分:

我从一个表单中收到了一个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)

  • @ markthewizard1234如果您的`listofIDs`是尚未执行的'IQueryable &lt;string&gt;`,则会发生这种情况。进行转换之前,请先使用ToList()对其执行:listofIDs.ToList()。Select(int.Parse).ToList() (2认同)
  • 如果任何字符串实际上不是整数,这将引发异常。请参阅下面的安全版本。/sf/answers/3409840731/ (2认同)

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)

它使用outC#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版本.


DDa*_*Dan 6

我知道这是旧帖子,但我认为这是一个很好的补充:您可以使用 List<T>.ConvertAll<TOutput>

List<int> integers = strings.ConvertAll(s => Int32.Parse(s));
Run Code Online (Sandbox Code Playgroud)