如何优化分配的真态
本文关键字:分配 优化 何优化 | 更新日期: 2023-09-27 17:51:02
我有这样的代码:
// Image one : first row
user = ReturnUser(pictureBoxUpOne);
if (user != null)
{
usersFirstRow.Add(user);
user = null;
}
// Image two : first row
user = ReturnUser(pictureBoxUpTwo);
if (user != null)
{
usersFirstRow.Add(user);
user = null;
}
对于我拥有的每张图像都重复了几次。所以我想知道是否有一些方法可以避免做:
的部分if (user != null)
和
在同一行usersFirstRow.Add(user);
仅在非null时添加,如优化的ifs。
我会将代码重构为一个接收图片框列表的函数。
private void MyMethod(List<PictureBox> pictureBoxes)
{
foreach (var pictureBox in pictureBoxes)
{
var user = ReturnUser(pictureBox);
if (user != null)
{
usersFirstRow.Add(user);
// This line not needed: user = null;
}
}
}
List<PictureBox> pictureBoxes =
new List<PictureBox>() { pictureBoxUpOne, pictureBoxUpTwo }
MyMethod(pictureBoxes);
给LINQ一点声音。尽管对于只有两个图片框,我可能会让代码保持原样—尽管使用不同的变量名称以最小化变量重用,并且我将完全消除null的赋值。YMMV。)
var pictureBoxes = new [] { pictureBoxUpOne, pictureBoxUpTwo /* etc */ };
userFirtRow.AddRange(pictureBoxes
.Select(pb => ReturnUser(pb))
.Where(u => u != null));
通过声明方法,您可以避免使用这些if语句。
private void AddIfNotNull(YourUserObject user)
{
if (user != null)
{
usersFirstRow.Add(user);
}
}
将图片框放入列表或容器中,这样您可以:
foreach pictureBox in someContainer.ChildControls
{
var user = ReturnUser(pictureBox);
if (user != null)
{
usersFirstRow.Add(user);
}
}
我会把它封装在一个函数中:
public void AddUserIfNotNull(User user) {
if (user != null)
usersFirstRow.Add(user);
}
// ... then ...
public void IteratePictureBoxesAndAddUsers(List<PictureBox> pictureBoxes) { // <-- feel free to rename
foreach (PictureBox p in pictureBoxes) {
AddUserIfNotNull(ReturnUser(p));
}
}
. .不过,我可能完全没有抓住你想要做的重点。