如何优化分配的真态

本文关键字:分配 优化 何优化 | 更新日期: 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));
    }
}

. .不过,我可能完全没有抓住你想要做的重点。