if (keyValuePair.Value.Any()) { var verifySet = new HashSet<string>(); var sameList = new List<string>(); var identity = keyValuePair.Value[0].GetIdentity(); if (!string.IsNullOrEmpty(identity)) { var fields = identity.Split("_"); foreach (var basicEntity in keyValuePair.Value) { List<string> fieldsValue = new(); foreach (var field in fields) { fieldsValue.Add(basicEntity.GetType().GetField(field, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(basicEntity)?.ToString()); } if (verifySet.Contains(identity)) { sameList.Add(identity); } else { verifySet.Add( string.Join("_", fieldsValue)); } } } } 优化这段代码
时间: 2024-02-10 20:18:02 浏览: 30
这段代码可以优化的地方有:
1. 每次循环都要调用 `keyValuePair.Value`,可以在外面先将其赋值给一个变量,以避免重复调用。
2. 在 `if (!string.IsNullOrEmpty(identity))` 判断内部,可以将 `fields` 数组中的元素转换为 `HashSet<string>`,以便更好地进行查找和比较。
3. 在 `foreach (var basicEntity in keyValuePair.Value)` 循环内部,可以将 `fieldsValue` 数组的创建放到外部,在循环内部进行清空和添加,以避免重复创建数组。
优化后的代码如下所示:
```
if (keyValuePair.Value.Any())
{
var verifySet = new HashSet<string>();
var sameList = new List<string>();
var values = keyValuePair.Value;
var identity = values[0].GetIdentity();
if (!string.IsNullOrEmpty(identity))
{
var fields = new HashSet<string>(identity.Split("_"));
var fieldsValue = new List<string>();
foreach (var basicEntity in values)
{
fieldsValue.Clear();
foreach (var field in fields)
{
fieldsValue.Add(basicEntity.GetType().GetField(field, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(basicEntity)?.ToString());
}
var identityValue = string.Join("_", fieldsValue);
if (verifySet.Contains(identityValue))
{
sameList.Add(identity);
}
else
{
verifySet.Add(identityValue);
}
}
}
}
```