C# 如何优化赋值的真实状态

C# 如何优化赋值的真实状态,c#,.net,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);

我有以下代码:

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

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

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);
private void MyMethod(列出图片框)
{
foreach(pictureBox中的var pictureBox)
{
var user=ReturnUser(pictureBox);
如果(用户!=null)
{
usersFirstRow.Add(用户);
//不需要此行:user=null;
}
}
}
列表图片框=
新列表(){pictureBoxUpOne,pictureBoxUpTwo}
MyMethod(图片框);

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

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);
private void MyMethod(列出图片框)
{
foreach(pictureBox中的var pictureBox)
{
var user=ReturnUser(pictureBox);
如果(用户!=null)
{
usersFirstRow.Add(用户);
//不需要此行:user=null;
}
}
}
列表图片框=
新列表(){pictureBoxUpOne,pictureBoxUpTwo}
MyMethod(图片框);

将图片盒放入列表或容器中,以便执行以下操作:

foreach pictureBox in someContainer.ChildControls
{
    var user = ReturnUser(pictureBox);
    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));
    }
}
public void AddUserIfNotNull(用户){
如果(用户!=null)
usersFirstRow.Add(用户);
}
// ... 然后。。。

public void IteratePictureBoxesAndAddUsers(列出图片框){/我将它包装在一个函数中:

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));
    }
}
public void AddUserIfNotNull(用户){
如果(用户!=null)
usersFirstRow.Add(用户);
}
//……然后。。。

public void iteratePictureBoxes和addUsers(List pictureBoxes){/通过声明一个方法,您可以获得缺少see if语句的结果

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

通过声明一个方法,您可以得到缺少see if语句的结果

private void AddIfNotNull(YourUserObject user)
{
   if (user != null)
   {
       usersFirstRow.Add(user);
   }
}
(只是想让LINQ有点声音。虽然对于两个图片框,我可能会让代码保持原样——尽管使用不同的变量名以最小化变量重用,并且我会完全消除null.YMMV的赋值。)

(只是想让LINQ有点声音。虽然对于两个图片框,我可能会让代码保持原样——尽管使用不同的变量名以最小化变量重用,并且我会完全消除null.YMMV的赋值。)


更大的问题是,为什么要重复使用变量?:(这将完全消除对null的额外赋值。如果有“许多”这样的操作(例如,超过2个),然后应该使用基于集合的方法。当然可以。但是什么是pictureBoxUpOne和pictureBoxTwo,windows组件?为什么在第二次调用
ReturnUser
之前设置
user=null;
?实际上我要重复这段代码两次以上,如果因为调用ReturnUser(),我会重复多次使用不同的图像。更大的问题是,为什么要重复使用变量?:(这将完全消除null的额外赋值。如果有“许多”这样的操作(例如,超过2个),然后应该使用基于集合的方法。当然可以。但是什么是pictureBoxUpOne和pictureBoxTwo,windows组件?为什么在第二次调用
ReturnUser
之前设置
user=null;
?实际上我要重复这段代码两次以上,如果因为调用ReturnUser(),我会重复多次使用不同的图像。这是一个很好的答案,因为它显示了不同的做事方式,但我个人不会在这种情况下使用LINQ,就像你自己说的那样。@ken2k为什么不使用LINQ?@Sonhja Personal preferences:)在某些情况下(例如在本例中,IMO),我认为使用LINQ会使代码更难阅读。这也是个人偏好。这是一个很好的答案,因为它显示了一种不同的做事方式,但我个人不会在这种情况下使用LINQ,就像你自己说的那样。@ken2k为什么不使用LINQ?@Sonhja personal preferences:)在某些情况下(例如,在本例中,IMO),我认为使用LINQ会使代码更难阅读。同样,这是个人偏好。有趣的方式…我想我要试试这个。有趣的方式…我想我要试试这个。