2011-06-01 173 views
114

我的问题是这个问题的一部分:如何把List <string>转换成列表<int>?

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

回答

270
listofIDs.Select(int.Parse).ToList() 
+0

异常引发 - LINQ to Entities无法识别方法'Int32 IndexOf(Char)'方法,并且此方法无法转换为商店表达式。 .net 4.0 – markthewizard1234 2016-05-31 08:22:28

+1

@ markthewizard1234如果你的'listofIDs'是一个'IQueryable ',那么会发生这种情况,它还没有被执行。在你进行转换之前先用'ToList()'执行它:'listofIDs.ToList()。Select(int.Parse).ToList()' – 2016-06-13 19:59:41

+1

didn'it for me – fnc12 2016-10-15 08:44:47

31

使用LINQ ...

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

使用LINQ:

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

这是最简单的方法,我想:

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

我经常在lambda表达式中看到这种模式:_x => someMethod(x)_。你确实知道你应该用_someMethod_替换它。由于你的例子变成_listOfStrings.Select (Convert.ToInt32); _。这可能更可读,更快,更短,我已经提到更优雅?所有其他人回答这个问题也是如此。 – JBSnorro 2011-06-01 13:05:22

+0

省略箭头语法时出现错误。这个工作:'List sss = new List ();''IEnumerable test1 = sss.Select (x => Convert.ToInt32(x));'但是这不是:'IEnumerable test2 = sss.Select (Convert.ToInt32);'错误是在'字符串,int,int'和'string,int'版本的Select之间的模糊调用。 – goodeye 2012-07-11 23:45:09

-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 2014-07-17 18:55:14

-2
list<int> integersList = decimalList.cast<int>().ToList() 

if nullable type then then place'''未来它的类型,像

list<int?> integersList = decimalList.cast<int?>().ToList() 
+2

他有一个字符串列表,它们不能被转换为int。 – Vache 2015-02-18 22:07:55

3

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

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

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

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变量。

这其他变种返回那里null条目插入无效整数可空整数的列表(即它保留了原始列表计数):

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

好的答案!我不知道是谁低估了你的(为什么?),但是拿我的赞成票。 – 2018-01-09 12:41:24

+0

非常感谢! C#6.0的版本低于https://stackoverflow.com/a/48712010/2340825 – 2018-02-09 18:30:30

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

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

信贷奥利维尔Jacot-Descombes为理念和C#7.0的版本。

相关问题