public void StopShooting() { foreach (var item in allScore) { //计算总成绩 float totalScore = 0; //计算脱靶数 int missNum = 0; //计算击中数 int hitNum = 0; //计算开枪数 int guns; //计算平均成绩 float averageScore; string grading; for (int i = 0; i < item.Value.Count; i++) { totalScore += item.Value[i].hitNum; if (item.Value[i].hitFlag == 0)//0是未击中 1是击中 missNum += 1; else hitNum += 1; } guns = item.Value.Count; averageScore = totalScore / guns; grading = GetGrading(averageScore); //每个人射击总的数据 Score score = new Score() { id = item.Key.ToString(), createTime = item.Value[0].startTime, totalScore = totalScore.ToString(), hitNum = hitNum.ToString(), missNum = missNum.ToString(), grading = grading, guns = guns.ToString(), turnType = item.Value[0].shootingMode.ToString(), turnTheme = item.Value[0].baJiType, playerName = PersonDao.Instance.FindNameByID(item.Key.ToString()).namee, workPlace = item.Value[0].workPlace }; //将数据添加到数据库中 ScoreInfoSqlMgr.Instance.Add(score); } //停止射击 要把存的所有的成绩给清空一下 allScore.Clear(); //存的顺序的也要清空一下 dicScore.Clear(); //不接受射击成绩的消息了 isRecive = false; }这段代码怎么优化
时间: 2023-06-04 18:03:08 浏览: 101
这段代码可以进行以下优化:
1. 检查循环条件是否正确:在 for 循环中,i 的增量应该是 i++ 而不是 i。这个问题可能是笔误导致的,但需要修正。
2. 提取变量:可以将每个人的成绩列表 item.Value 提取到变量中,以提高代码的可读性。
3. 避免重复计算:在循环中,计算 totalScore、missNum 和 hitNum 都是基于同一个成绩项,因此可以将这些计算提取到循环外部,以避免重复计算。
4. 使用 LINQ:可以利用 LINQ 对成绩列表进行统计和筛选,以减少代码量并提高可读性。
以下是优化后的代码:
public void StopShooting()
{
foreach (var scores in allScore.Values)
{
// 提取变量
var item = scores[0];
var shootingMode = item.shootingMode.ToString();
var baJiType = item.baJiType;
var workPlace = item.workPlace;
var playerName = PersonDao.Instance.FindNameByID(item.Key.ToString()).namee;
// 使用 LINQ 进行统计和筛选
var totalScore = scores.Sum(s => s.hitFlag);
var missNum = scores.Count(s => s.hitFlag == 0);
var hitNum = scores.Count(s => s.hitFlag == 1);
var guns = scores.Count;
var averageScore = (float)totalScore / guns;
var grading = GetGrading(averageScore);
// 每个人射击总的数据
var score = new Score()
{
id = item.Key.ToString(),
createTime = item.startTime,
totalScore = totalScore.ToString(),
hitNum = hitNum.ToString(),
missNum = missNum.ToString(),
grading = grading,
guns = guns.ToString(),
turnType = shootingMode,
turnTheme = baJiType,
playerName = playerName,
workPlace = workPlace
};
// 将数据添加到数据库中
ScoreInfoSqlMgr.Instance.Add(score);
}
// 停止射击,清空数据
allScore.Clear();
dicScore.Clear();
isRecive = false;
}
阅读全文