UnitsNet可以解析单位的字符串以及值吗?

时间:2018-04-08 17:31:36

标签: c#

我正在寻找一个可以在我的WinForms应用程序中使用的库,它允许用户以文本形式执行单位转换查询,类似于Google允许您执行此操作的方式。例如:

5 lbs in kg

我安装了UnitsNet并在ObjectBrowser中搜索了“parse”,但只找到了一个UnitsNet.AmbiguousUnitParseException类,这可能对我的目标不利;)

我愿意自己做一些解析,比如在上面的例子中分离“5”,“lbs”和“kg”但是对于我来说,从初始文档中我并不明白UnitNet可以解析“lbs”和例如“kg”。

我是在叫错树吗? UnitsNet看起来像一个很好的,简单的库,可以在.NET中使用,但是有更好的转换器库可以满足我的需要吗?

1 个答案:

答案 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 valuesource unittarget unit来提取它们。更复杂的工具,那么您绝对可以完成此任务。

P.S:lbs令人惊讶地不是受支持的英镑缩写,所以我现在才在UnitsNet v3.102.0中添加它。