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


157

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

我从表单中收到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);
}

Answers:


391
listofIDs.Select(int.Parse).ToList()

引发异常-LINQ to Entities无法识别方法'Int32 IndexOf(Char)'方法,并且该方法无法转换为商店表达式。.net 4.0
markthewizard1234'5

4
@ markthewizard1234,如果你的会发生listofIDs是一个IQueryable<string>还没有被执行。在执行ToList()转换之前,首先执行它:listofIDs.ToList().Select(int.Parse).ToList()
Michael Hornfeck,2016年

我确定在2013年这行得通,但对我而言不再有效。下面使用linq语句添加了一个更新的选项。
布兰登·特皮

1
如果任何字符串实际上不是整数,则将引发异常。请参阅下面的安全版本。stackoverflow.com/a/48712010/2340825
BA TabNabber

@MichaelHornfeck第一个ToList应该是AsEnumerable,不需要分配第二个List
Ronan Thibaudau

38

使用Linq ...

List<string> listofIDs = collection.AllKeys.ToList();  
List<int> myStringList = listofIDs.Select(s => int.Parse(s)).ToList();

20

这是一个安全的变体,可以过滤掉无效的整数:

List<int> ints = strings
    .Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
    .Where(n => n.HasValue)
    .Select(n => n.Value)
    .ToList();

它使用outC#7.0引入的新变量。

此其他变体返回一个可为空的int列表,其中null插入了用于无效int的条目(即,它保留了原始列表计数):

List<int?> nullableInts = strings
    .Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
    .ToList();

十分感谢!下面的C#6.0版本stackoverflow.com/a/48712010/2340825
BA TabNabber

13

使用Linq:

var intList = stringList.Select(s => Convert.ToInt32(s)).ToList()

1
var intList = stringList.Select(Convert.ToInt32).ToList()
shivani

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

感谢Olivier Jacot-Descombes提出的想法和C#7.0版本。


3

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

List<int> integers = strings.ConvertAll(s => Int32.Parse(s));

1

我认为这是最简单的方法:

var listOfStrings = (new [] { "4", "5", "6" }).ToList();
var listOfInts = listOfStrings.Select<string, int>(q => Convert.ToInt32(q));

6
我经常在lambda表达式中看到这种模式:x => someMethod(x)。您确实知道应该用someMethod代替它。这样,您的示例将成为listOfStrings.Select <string,int>(Convert.ToInt32);。。这可能更具可读性,更快,更短,我是否已经提到更优雅?所有其他回答此问题的人也是如此。
JBSnorro 2011年

省略箭头语法时出现错误。这工作:List<string> sss = new List<string>(); IEnumerable<int> test1 = sss.Select<string, int>(x => Convert.ToInt32(x));但这并不:IEnumerable<int> test2 = sss.Select<string, int>(Convert.ToInt32);该错误是模棱两可之间的通话string,int,intstring,int选择的版本。
goodeye

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

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

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

TryParse看起来很浪费,因为它给您提供了值,然后只需将该值扔出窗口然后进行解析即可。您实质上是双重解析。
Ristogod

0
intList = Array.ConvertAll(stringList, int.Parse).ToList();

0

对于这个简单的问题,这可能是多余的。但是对于与Linq有关的Try-Do方法,我倾向于使用匿名类来表达更具表现力的代码。它类似于Olivier Jacot-DescombesBA 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();

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

3
考虑添加有关答案的文字说明,而不是仅提供代码。
carlosfigueira

-1
yourEnumList.Select(s => (int)s).ToList()

嗨,Patryk。欢迎使用StackOverflow。如果您可以对已发布的非常简洁的解决方案写一些描述,那会更好。这是对该网站上一个非常老的问题的解答,将由多个用户进行审查。
Aditya
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.