UnitsNet能否解析含数值与单位的字符串?WinForms单位转换咨询
嘿,别担心,UnitsNet其实完全能满足你的单位解析与转换需求,只是你可能没找对正确的API位置~下面我给你详细讲讲怎么实现你要的功能:
UnitsNet的单位解析与转换实现方案
1. 直接解析完整的数值+单位字符串
UnitsNet的各个量纲类(比如处理质量的Mass、长度的Length、温度的Temperature等)都自带Parse静态方法,你之前在对象浏览器搜“parse”只找到异常类,是因为没进到具体的量纲类里查找。
比如处理你举的5 lbs in kg例子,你可以先把查询字符串拆分,拿到源数值单位部分和目标单位,再用以下代码处理:
// 假设你的输入查询是"5 lbs in kg" string query = "5 lbs in kg"; string[] parts = query.Split(new[] {" in "}, StringSplitOptions.RemoveEmptyEntries); // 解析源数值和单位 Mass sourceMass = Mass.Parse(parts[0]); // 转换为目标单位 Mass targetMass = sourceMass.ToUnit(MassUnit.Kilogram); // 输出结果,比如会得到 "2.26796 kg" MessageBox.Show($"{parts[0]} = {targetMass.ToString("F4")}");
2. 手动拆分后的自定义处理
既然你愿意自己拆分出数值、源单位、目标单位,那可以用更直接的方式构造量纲对象,灵活性更高:
// 假设你已经拆分得到以下内容 double inputValue = 5; string sourceUnitStr = "lbs"; string targetUnitStr = "kg"; // 先把字符串单位转换为UnitsNet的枚举值 if (Enum.TryParse(sourceUnitStr, out MassUnit sourceUnit)) { // 构造源量纲对象 Mass source = Mass.From(inputValue, sourceUnit); // 转换到目标单位 if (Enum.TryParse(targetUnitStr, out MassUnit targetUnit)) { double result = source.As(targetUnit); MessageBox.Show($"{inputValue} {sourceUnitStr} = {result:F4} {targetUnitStr}"); } }
3. 处理歧义单位的情况
有些单位存在歧义(比如oz可以指质量盎司或流体盎司),这时候UnitsNet会抛出UnitsNet.AmbiguousUnitParseException,你可以通过指定具体量纲类来明确解析方向:
// 解析为质量单位盎司 Mass massOunce = Mass.Parse("10 oz"); // 解析为体积单位流体盎司 Volume fluidOunce = Volume.Parse("10 fl oz");
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

