gpt4 book ai didi

c# - 如何在 LINQ 查询中将字符串解析为 float ?

转载 作者:行者123 更新时间:2023-12-03 18:41:48 25 4
gpt4 key购买 nike

我正在编写一个摩尔质量计算器,它将显示有关用户输入的化学式的信息,例如元素的原子序数、元素的符号、沸点和熔点等。

信息显示在 DataGridView 中,它有一个 DataTable 作为 DataSource。我还构建了一个名为 Element 的类,这也许不足为奇,代表一个元素。它只是持有一堆字符串属性来表示元素信息,比如原子序数、沸点等。

我从中提取元素信息的 CSV 文件有一些空条目,因为并非每个元素的所有信息都是已知的。我用“未知”一词替换了条目,这解释了为什么 Element 类中的每个属性都是字符串。

目前,对于需要非字符串排序的列,我正在使用 LINQ 对构建 DataTable 的集合进行排序。例如:

        private void SortByAtomicMass()
{
var elementsByAtomicMass = (from el in Elements
orderby float.Parse(el.Mass)
select new
{
el.Name,
el.AtomicNumber,
el.Symbol,
el.Mass,
el.CPKHexColor,
el.Electronegativity,
el.State,
el.BondingType,
el.MeltingPoint,
el.BoilingPoint,
el.GroupBlock,
el.YearDiscovered
}).ToList<dynamic>();
GenerateNewDataTable(elementsByAtomicMass);
}

这按预期工作 - 它按照您的预期对原子质量列进行排序。我对熔点列排序尝试了相同的方法:

        private void SortByMeltingPoint()
{
var elementsByMeltingPoint = (from el in Elements
orderby float.TryParse(el.MeltingPoint, out _)
select new
{
el.Name,
el.AtomicNumber,
el.Symbol,
el.Mass,
el.CPKHexColor,
el.Electronegativity,
el.State,
el.BondingType,
el.MeltingPoint,
el.BoilingPoint,
el.GroupBlock,
el.YearDiscovered
}).ToList<dynamic>();
GenerateNewDataTable(elementsByMeltingPoint);
}

这失败了,并以一种看似随机的方式进行排序。我该如何解决这个问题,同时停留在 LINQ 方法的范围内?我正在努力提高我在该领域的技能。

最佳答案

您是根据它是否是 float 来排序,而不是根据

也许你想要这样的东西:

orderby float.TryParse(el.MeltingPoint, out var value) ? value : float.MinValue 

如果不是float,就放在底部


TryParse

Converts the string representation of a number to its single-precision floating-point number equivalent. A return value indicates whether the conversion succeeded or failed.

关于c# - 如何在 LINQ 查询中将字符串解析为 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60234702/

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