如何将 List 转换为 List

本文关键字:List int 转换 string | 更新日期: 2023-09-27 17:58:14

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

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

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

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

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

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

使用 Linq ...

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

What no 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 版本。

使用 Linq:

var intList = stringList.Select(s => Convert.ToInt32(s)).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();

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

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

对于这个简单的问题来说,这可能是矫枉过正的。但是对于与 Linq 相关的 Try-Do 方法,我倾向于使用匿名类来获取更具表现力的代码。这与Olivier Jacot-Descombes和BA 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();

实现此目的的另一种方法是使用 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);
}
yourEnumList.Select(s => (int)s).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();
intList = Array.ConvertAll(stringList, int.Parse).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
  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;
  }