``` if (fileName == equipId) { string content = File.ReadAllText(downloadPath); string pattern = @"X\s*=\s*([\-\d\.]+)\s*mm\s*Y\s*=\s*([\-\d\.]+)\s*mm\s*Z\s*=\s*([\-\d\.]+)\s*mm"; Match match = Regex.Match(content, pattern); double x=0, y = 0, z = 0; if (match.Success) { x = Convert.ToDouble(match.Groups[1].Value); y = Convert.ToDouble(match.Groups[2].Value); z = Convert.ToDouble(match.Groups[3].Value); } else { Console.WriteLine("无法解析 XYZ 坐标值"); log.Error($"{equipId} 【GetParamValueERR】:无法解析 XYZ 坐标值"); } for (int i = 0; i < prmInfo.Length; i++) { if (prmInfo[i].Type == "SVID") { switch (prmInfo[i].RequestID) { case "1": prmInfo[i].SetResponseValue(x.ToString()); break; case "2": prmInfo[i].SetResponseValue(y.ToString()); break; case "3": prmInfo[i].SetResponseValue(z.ToString()); break; } } } }```重新优化,简洁为主
时间: 2025-04-03 07:17:03 浏览: 25
以下是优化后的代码版本,简化了逻辑结构并增强了可读性:
```csharp
if (fileName == equipId)
{
try
{
// 读取文件内容
string content = File.ReadAllText(downloadPath);
// 定义正则表达式模式
string pattern = @"X\s*=\s*(-?\d+(\.\d+)?)\s*mm\s*Y\s*=\s*(-?\d+(\.\d+)?)\s*mm\s*Z\s*=\s*(-?\d+(\.\d+)?)\s*mm";
Match match = Regex.Match(content, pattern);
// 如果匹配成功,则提取XYZ坐标值
if (!match.Success)
throw new Exception("无法解析 XYZ 坐标值");
double x = Convert.ToDouble(match.Groups[1].Value);
double y = Convert.ToDouble(match.Groups[3].Value);
double z = Convert.ToDouble(match.Groups[5].Value);
// 根据 RequestID 设置响应值
foreach (var info in prmInfo.Where(info => info.Type == "SVID"))
{
switch (info.RequestID)
{
case "1": info.SetResponseValue(x.ToString()); break;
case "2": info.SetResponseValue(y.ToString()); break;
case "3": info.SetResponseValue(z.ToString()); break;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
log.Error($"{equipId} 【GetParamValueERR】:{ex.Message}");
}
}
```
### 主要改动说明:
1. **异常处理**:将可能出现错误的部分封装到 `try-catch` 中,避免程序因未捕获异常而崩溃。
2. **正则分组精简**:直接通过索引访问匹配结果,并去掉冗余变量声明。
3. **循环改写**:使用 LINQ 简化过滤条件,减少不必要的复杂度。
4. **日志记录改进**:统一在异常块中完成日志记录。
---
阅读全文
相关推荐














