繁体   English   中英

无法理解foreach(x =>)语法

[英]Trouble understanding foreach (x =>) syntax

我是C#的新手,正在尝试理解另一位开发人员的代码-参见下文:

        nameFile.ForEach(x =>
        {
            FileChecker singleFile = new FileChecker();
            singleFile.FileName = x;
            singleFile.FoundDT = DateTime.Now;

            singleFile.IsData = this.IsData(singleFile.FileName);
            singleFile.IsStore = this.IsStore(singleFile.FileName);
            if (singleFile.IsData )
            {
                //...               
            }
        });

这是FileChecker定义的FileChecker代码:

public FileChecker()
{
    this.fileDownloaded = false;
    this.IsData = false;
    this.IsStor = false;
}
public bool IsData { get; set; }
public bool IsStore { get; set; }

我有两个问题:

  1. 有人可以向我解释或指向解释该foreach工作原理的链接吗? ForEach(x => ...);

  2. 我不理解此语句(singleFile.IsData )工作方式,因为定义仅是: public bool IsData { get; set; } public bool IsData { get; set; } public bool IsData { get; set; }换句话说,开发人员想要寻找什么? IsData是什么意思? 他是否打算查看它是否符合条件(例如文件名语法)?

与...相同

foreach (var x in nameFile)
{
...
}

IsData是自动属性。 查一下...

  1. List.ForEach()接受将对列表中的每个项目执行的委托,在您的情况下, =>之后的代码块将对nameFile列表中的每个项目执行,并且x将是项目变量。
  2. 这是自动属性定义,将在幕后为您生成背景字段,这就是为什么您可以在不手动定义字段的情况下使用它的原因

您可能会找到有用的文章: “ foreach”与“ ForEach”

  1. 请参阅有关lambda表达式的介绍性文章: http : //msdn.microsoft.com/zh-cn/library/bb397687.aspx

  2. public bool IsData { get; set; } public bool IsData { get; set; }是一种简写的属性声明,类似于编写:

     private bool _isData; public bool IsData { get {return _isData;} set {_isData = value;} } 
  1. x => ...称为lambda表达式。 它只是说“对于每个元素,将其命名为'x'并将其传递给以下代码”。

  2. 进行了足够的解释,只需要指出,尽管编写起来要短得多,但是您需要在构造函数中设置默认参数,而不是直接在成员字段上设置默认参数,因为您没有。 您甚至可以将这个自动化属性与私有设置器一起使用。

ForEach扩展方法 ,并且是System.Linq的一部分(编辑: List中有一个采用Action的方法,但是System.Linq具有其他扩展)。 它在列表上运行。 x =>位是lambda表达式的一部分。 IsData只是一个暴露为自动实现属性的布尔值,它可以是true或false。

上面回答了第一个问题,它只是一个lambda表达式,其中包含需要在foreach的每次迭代中执行的代码。

对于第二个问题,如果要查找IsData属性的目的,请转到该类(第一个代码块中的类)的IsData方法内部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM