如何优化分配的真实状态

时间:2013-01-09 09:19:06

标签: c# .net

我有这段代码:

// 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); 

只有在它不为空时才添加它,例如优化的 ifs

5 个答案:

答案 0 :(得分:5)

我会将代码重构为一个接收图片框列表的函数。

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);

答案 1 :(得分:4)

(只是为了给LINQ一点声音。虽然对于只有两个图片框,我可能会让代码保持原样 - 虽然使用不同的变量名来最小化变量重用和我将完全取消null的赋值.YMMV。)

var pictureBoxes = new [] { pictureBoxUpOne, pictureBoxUpTwo /* etc */ };
userFirtRow.AddRange(pictureBoxes
    .Select(pb => ReturnUser(pb))
    .Where(u => u != null));

答案 2 :(得分:2)

通过声明一个方法,你可以得到缺少这些if语句。

private void AddIfNotNull(YourUserObject user)
{
   if (user != null)
   {
       usersFirstRow.Add(user);
   }
}

答案 3 :(得分:1)

将图片框放在列表或容器中,以便您可以这样做:

foreach pictureBox in someContainer.ChildControls
{
    var user = ReturnUser(pictureBox);
    if (user != null)
    {
        usersFirstRow.Add(user);
    }
}

答案 4 :(得分:1)

我将它包装在一个函数中:

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));
    }
}

..然后,我可能完全错过了你想要做的事情......