You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:00:03