C# int32.TryParse 从 CSV 文件读取后

C# int32.TryParse after I read from a CSV file

我的任务是从 csv 导入。

在 csv 中我有一个 'Location Name' 和 Population' 列(位置代表一个位置的人口数量),但是位置列中的一些行包含 'NA' 而不是“0”,我必须处理这些数字。

我尝试通过以下方式解决问题:

首先我从 csv 中读取人口作为一个字符串,但之后我应该将它转换为 int,因为我需要列出人口大于某个数字的行。

示例如下:

var task1 = from mergedStats in mergedDataCSV
                        orderby mergedStats.Population descending
                        where mergedStats.Population > 10000 // Here is the problem
                        select new
                        {
                            mergedStats.Name,
                            mergedStats.Population
                        };

当然,'>' 不能应用于 'string' 和 'int' 类型的操作数。我尝试了 int32.TryParse(因此 'NA' 值可以为 0)但我不能在当前上下文中使用它。

你能帮我解决这个问题吗?

读取数据并将其解析到 in 而不是在查询中执行会更好,但是您没有包含您的读取代码,所以我不能直接建议如何在那里修改它。以下是您如何在查询中执行此操作:

where (int.TryParse(mergedStats.Population, out var pop) ? pop : 0) > 10000

TryParse returns bool true 如果它有效,在这种情况下 ? 看到 true 和 returns pop,这是一个 int 变量创建的TryParse 的第二个参数——包含成功解析值的输出参数。如果解析没有成功 TryParse returns false,取而代之的是 0。如果您希望在其他未来场景中使用不同的值,例如如果某些内容未解析则返回 -1,您可以在此处更改它

请注意,您可以在阅读代码时执行相同的技术,最好在那里完成,因为它已经完成了一次,可以一遍又一遍地查询。每次需要用到的时候把一个东西保存成字符串再转成int是一种资源浪费