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会使代码更难阅读。同样,这是个人偏好。有趣的方式…我想我要试试这个。有趣的方式…我想我要试试这个。