布尔语句,其中需要额外的括号

时间:2014-10-16 16:07:56

标签: c# boolean

public class Part
{
    public String VendorId { get; set; }
    public String VendorPart { get; set; }
    public String BasePart { get; set; }
    public String Description { get; set; }
    public ImageViewType View { get; set; }
}

private  List<Part> partList = null;

private bool deleteOldFile = false;

我很好奇以下代码的工作原理(一旦partList加载了数据):

foreach (Part p in partList)
{
    deleteOldFile = ((partList.Last().BasePart) == (p.BasePart));
    MoveFile(FileType.Image, p, GetSetImageFile(imageBox1, currentFile));
}

以下内容不起作用(永远不会将布尔deleteOldFile设置为true):

foreach (Part p in partList)
{
    deleteOldFile = (partList.Last().BasePart == p.BasePart);
    MoveFile(FileType.Image, p, GetSetImageFile(imageBox1, currentFile));
}

2 个答案:

答案 0 :(得分:1)

这两个选项之间没有区别。问题的原因可能是因为您每次迭代都会覆盖deleteOldFile的值。我想你想写这个:

foreach (Part p in partList)
{
    deleteOldFile = deleteOldFile || partList.Last().BasePart == p.BasePart;
    MoveFile(FileType.Image, p, GetSetImageFile(imageBox1, currentFile));
}

答案 1 :(得分:1)

您正在为列表中的ebvery项重置deleteOldFile

如果你想删除文件,如果任何项目与最后一项相同,(当然最后一项本身除外,它总是与自身相同),然后改为:< / p>

  var deleteFile = false;
  var last = partList.Last();
  foreach (Part p in partList)
      if (p.Equals(last) || deleteOldFile = (p.BasePart == last.BasePart)) 
          break;