我正在寻找一个库在我的WinForms应用程序中使用,它将允许用户以文本形式执行单元转换查询,类似于Google允许您这样做。示例:
5 lbs in kg
我安装了UnitsNet,并在ObjectBrowser中搜索“解析”,但只找到了一个UnitsNet.AmbiguousUnitParseException类,这对我的目标来说可能不太好;)
我愿意自己进行一些解析,比如在上面的示例中将"5“、"lbs”和"kg“分开,但我并不认为UnitsNet可以解析"lbs”和"kg“。
我撞错树了吗?UnitsNet看起来是一个很好的、简单的库,可以在.NET中使用,但是是否有一个更好的转换器库可以满足我的需要?
发布于 2018-06-26 18:15:42
更新2020-10-19
使用UnitsNet 4,您可以这样做:
var kgs = UnitConverter.ConvertByAbbreviation(5, "Mass", "lbs", "kg"); // 2.26796185旧答案
没有内置的免费格式文本解析器,但它确实支持解析字符串,如"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.26796185UnitsNet目前缺乏处理数量和单位的能力,因此在本例中,我们只期望使用MassUnit。库可以为您枚举所有单元枚举并返回成功的单元枚举,但到目前为止还没有到位。您可以通过列举一些感兴趣的单元枚举,或者所有这些单位枚举,并尝试解析,直到其中一个成功。
当然,要支持真正自由的文本,需要做更多的工作,但是如果您有一些已知的文本模式,可以使用regex或更复杂的工具提取source value、source unit和target unit,那么您绝对可以完成这一任务。
P.S:令人惊讶的是,lbs并不是支持磅的缩写,所以我刚刚在UnitsNet v3.102.0中添加了它。
https://stackoverflow.com/questions/49720682
复制相似问题