我正在寻找一个可以在我的WinForms应用程序中使用的库,它允许用户以文本形式执行单位转换查询,类似于Google允许您执行此操作的方式。例如:
5 lbs in kg
我安装了UnitsNet并在ObjectBrowser中搜索了“parse”,但只找到了一个UnitsNet.AmbiguousUnitParseException
类,这可能对我的目标不利;)
我愿意自己做一些解析,比如在上面的例子中分离“5”,“lbs”和“kg”但是对于我来说,从初始文档中我并不明白UnitNet可以解析“lbs”和例如“kg”。
我是在叫错树吗? UnitsNet看起来像一个很好的,简单的库,可以在.NET中使用,但是有更好的转换器库可以满足我的需要吗?答案 0 :(得分:0)
没有内置的自由格式文本解析器,但它确实支持解析"1 kg"
和"1m"
之类的字符串。
一个非常幼稚的文本解析器,可以解析输入"5 lbs in kg"
,例如:
string input = "5 lb in kg";
string[] parts = input.Split(new[] { " in "}, StringSplitOptions.RemoveEmptyEntries);
string massText = parts[0];
string toUnitText = parts[1];
MassUnit toUnit = UnitSystem.Default.Parse<MassUnit>(toUnitText);
Mass mass = Mass.Parse(massText);
double toValue = mass.As(toUnit);
Console.WriteLine(toValue); // 2.26796185
UnitsNet当前缺乏处理数量和单位的通用功能,因此在此示例中,我们期望仅使用MassUnit
。库可以为您枚举所有单位枚举,并返回成功的单位枚举,但目前尚不成功。您可以自己轻松地做到这一点,方法是枚举部分或全部感兴趣的单位枚举,然后尝试解析直到其中一个成功。
自然,需要更多的工作来支持真正的自由格式文本,但是如果您拥有一些已知的文本模式,则可以使用正则表达式或source value
,source unit
和target unit
来提取它们。更复杂的工具,那么您绝对可以完成此任务。
P.S:lbs
令人惊讶地不是受支持的英镑缩写,所以我现在才在UnitsNet v3.102.0中添加它。