1

我有这个代码:

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

4

5 回答 5

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);
于 2013-01-09T09:22:41.063 回答
4

(只是给 LINQ 一点发言权。尽管对于两个图片框,我可能会保留与原样相似的代码 - 尽管使用不同的变量名称以最大限度地减少变量重用,并且我会完全消除 null 的分配。YMMV .)

var pictureBoxes = new [] { pictureBoxUpOne, pictureBoxUpTwo /* etc */ };
userFirtRow.AddRange(pictureBoxes
    .Select(pb => ReturnUser(pb))
    .Where(u => u != null));
于 2013-01-09T09:25:07.143 回答
2

通过声明一个方法,您可能会缺少这些 if 语句。

private void AddIfNotNull(YourUserObject user)
{
   if (user != null)
   {
       usersFirstRow.Add(user);
   }
}
于 2013-01-09T09:24:57.080 回答
1

将图片框放在列表或容器中,以便您可以执行以下操作:

foreach pictureBox in someContainer.ChildControls
{
    var user = ReturnUser(pictureBox);
    if (user != null)
    {
        usersFirstRow.Add(user);
    }
}
于 2013-01-09T09:24:32.197 回答
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));
    }
}

..再一次,我可能完全错过了你想要做的事情的重点..

于 2013-01-09T09:24:35.673 回答