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

我从一个表单中接收id的集合。我需要获取键,将它们转换为整数,并从DB中选择匹配的记录。

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

当前回答

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

其他回答

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

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

将字符串值转换为整数列表

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

这将字符串数组转换为长数组。它返回成功转换的值的个数。

public static int strv_to_longv(string[] src, int src_offset, long[] dst, int dst_offset)
{
    int i = src_offset;
    int j = dst_offset;
    int ni = src.Length;
    int nj = dst.Length;
    while ((i < ni) && (j < nj))
    {
        j += long.TryParse(src[i], out dst[j]) ? 1 : 0;
        i++;
    }
    return j;
}
var line = "lemon 4 grape 1 garlic 77";
string[] words = line.Split(' ');
long[] longs = new long[10];
int l = strv_to_longv(words, 1, longs, 0);
//longs will be equal {4, 1, 77}
//l will be equal 3

下面是一个过滤无效整型的安全变体:

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

你可以通过LINQ使用它

     var selectedEditionIds = input.SelectedEditionIds.Split(",").ToArray()
                            .Where(i => !string.IsNullOrWhiteSpace(i) 
                             && int.TryParse(i,out int validNumber))
                            .Select(x=>int.Parse(x)).ToList();