gpt4 book ai didi

c# - 转换拆分字符串时出错

转载 作者:行者123 更新时间:2023-11-30 21:36:42 26 4
gpt4 key购买 nike

我有一个从对象属性中获取的字符串。我将 IT 拆分为一个字符串列表,然后我想将其转换为一个整数列表。

代码如下:

TheListOfInts = s.TheListOfStrings
.Split(',')
.ToList()
.Select(g => Convert.ToInt32(g))
.ToList();

我遇到了一个错误

Input string was not in a correct format.

问题是有时 TheListOfStrings 是 ;null;我认为这就是触发错误的原因。我可以在 lambda 中添加什么来考虑空字符串的可能性?

最佳答案

将字符串解析为 int 时,您需要使用 int.TryParse 来确保它不会抛出异常。在 linq 中,您可以这样做:

var result = s.TheListOfStrings.Split(',')
.Select(i => (int.TryParse(i, out var value), value))
.Where(pair => pair.Item1) // remove items that failed to be parsed
.Select(pair => pair.value) // take the parsed value
.ToList();

这修复了拆分中的空项目的情况(您仍然可以添加 RemoveEmptyEntries 标志),而且,如果项目不是有效整数,它将不会解析它。

请注意,您添加的第一个 ToList() 不是必需的。


如果您使用的是 C# 7.0 之前的版本,那么您应该:

int value;
var result = s.TheListOfStrings.Split(',')
.Select(i => new { Succeeded = int.TryParse(i, out value), Value = value })
.Where(pair => pair.Succeeded) // remove items that failed to be parsed
.Select(pair => pair.Value) // take the parsed value
.ToList();

区别:


在您的问题中您说:问题是有时 TheListOfStrings 为 null,我认为这就是触发错误的原因

这不会是错误的原因,就好像您会收到一个 NullReferenceException 一样。

为了解决这个问题,您可以:

  1. 使用 ?. 运算符(然后结果可能是 null 而不是空集合。
  2. 检查是否为null:

    var result = s.TheListOfStrings == null ? 
    Enumerable.Empty<int> () :
    /*The linq query above*/;

关于c# - 转换拆分字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47928169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com