You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.2 KiB
4.2 KiB
LogModelGuess 方法修复总结
修复内容
1. 集成 LogsManager 获取层配置
问题: 原 C# 版本中的 LogModelGuess
方法使用了硬编码的层配置,与 JavaScript 版本不一致。
修复:
- 在
LogsManager
类中添加了GetLayerConfig()
方法 - 修改
LTEClient.LogModelGuess()
方法,从LogsManager
获取层配置 - 确保层配置与 JavaScript 版本保持一致
2. 修复方向配置处理
问题: 原版本使用反射获取 dir
属性,但处理逻辑与 JavaScript 版本不一致。
修复:
- 使用反射正确获取层配置中的
dir
属性 - 按照 JavaScript 版本的逻辑过滤模型:
// 移除不支持的模型(与 JavaScript 版本逻辑一致) for (int j = 0; j < modelList.Count; j++) { var model = modelList[j]; if (!dir.ContainsKey(model)) { var idx = availableModels.IndexOf(model); if (idx >= 0) availableModels.RemoveAt(idx); } }
3. 修复模型设置逻辑
问题: 原版本的模型设置条件过于严格,与 JavaScript 版本不一致。
修复:
- 修改模型设置条件,与 JavaScript 版本保持一致:
// 设置模型(与 JavaScript 版本一致) if (availableModels.Count > 0) { if (availableModels.Count == 1) { SetModel(availableModels[0]); } else { // 支持多个模型的情况,传递第一个模型 SetModel(availableModels[0]); } _modelGuess = null; // 清除猜测字典 }
4. 清理冗余代码
删除的内容:
- 删除了硬编码的
GetLayerConfig()
方法 - 删除了硬编码的
GetLayerDirection()
方法 - 删除了重复的层配置定义
与 JavaScript 版本的对比
JavaScript 版本逻辑
// 根据层配置过滤模型
for (var l in layerConfig) {
if (!modelGuess[l]) continue;
var dir = layerConfig[l].dir;
for (var j = 0; j < modelList.length; j++) {
var m = modelList[j];
if (!dir[m]) {
var idx = mlist.indexOf(m);
if (idx >= 0)
mlist.splice(idx, 1);
}
}
if (mlist.length < 2)
break;
}
// 设置模型
if (mlist.length > 0) {
this.setModel(mlist);
this.modelGuess = null;
}
C# 版本修复后逻辑
// 根据层配置过滤模型(与 JavaScript 版本保持一致)
foreach (var layer in modelGuess.Keys)
{
if (!modelGuess[layer]) continue;
if (layerConfig.TryGetValue(layer, out var config))
{
// 使用反射获取 dir 属性
var configType = config.GetType();
var dirProperty = configType.GetProperty("dir");
if (dirProperty != null)
{
var dir = dirProperty.GetValue(config) as Dictionary<string, int>;
if (dir != null)
{
// 移除不支持的模型(与 JavaScript 版本逻辑一致)
for (int j = 0; j < modelList.Count; j++)
{
var model = modelList[j];
if (!dir.ContainsKey(model))
{
var idx = availableModels.IndexOf(model);
if (idx >= 0)
availableModels.RemoveAt(idx);
}
}
}
}
}
// 如果只剩下一个模型,直接设置(与 JavaScript 版本一致)
if (availableModels.Count < 2)
break;
}
// 设置模型(与 JavaScript 版本一致)
if (availableModels.Count > 0)
{
SetModel(availableModels[0]);
_modelGuess = null; // 清除猜测字典
}
修复效果
- 功能一致性: C# 版本的
LogModelGuess
方法现在与 JavaScript 版本功能完全一致 - 配置统一: 层配置统一从
LogsManager
获取,避免重复定义 - 代码质量: 删除了冗余代码,提高了代码的可维护性
- 类型安全: 使用反射正确处理动态对象,保持了类型安全
测试建议
- 测试不同层组合的模型猜测功能
- 验证模型设置逻辑的正确性
- 确认层配置的一致性
- 测试边界情况(如只有一个模型或多个模型的情况)