我有这段代码:
// 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 。
答案 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));
}
}
..然后,我可能完全错过了你想要做的事情......