[英]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; }
我有两个问题:
有人可以向我解释或指向解释该foreach工作原理的链接吗? ForEach(x => ...);
我不理解此语句(singleFile.IsData )
工作方式,因为定义仅是: public bool IsData { get; set; }
public bool IsData { get; set; }
public bool IsData { get; set; }
换句话说,开发人员想要寻找什么? IsData是什么意思? 他是否打算查看它是否符合条件(例如文件名语法)?
与...相同
foreach (var x in nameFile)
{
...
}
IsData
是自动属性。 查一下...
=>
之后的代码块将对nameFile
列表中的每个项目执行,并且x
将是项目变量。 您可能会找到有用的文章: “ foreach”与“ ForEach”
请参阅有关lambda表达式的介绍性文章: http : //msdn.microsoft.com/zh-cn/library/bb397687.aspx
public bool IsData { get; set; }
public bool IsData { get; set; }
是一种简写的属性声明,类似于编写:
private bool _isData; public bool IsData { get {return _isData;} set {_isData = value;} }
x => ...称为lambda表达式。 它只是说“对于每个元素,将其命名为'x'并将其传递给以下代码”。
进行了足够的解释,只需要指出,尽管编写起来要短得多,但是您需要在构造函数中设置默认参数,而不是直接在成员字段上设置默认参数,因为您没有。 您甚至可以将这个自动化属性与私有设置器一起使用。
ForEach是扩展方法 ,并且是System.Linq的一部分(编辑: List中有一个采用Action的方法,但是System.Linq具有其他扩展)。 它在列表上运行。 x =>位是lambda表达式的一部分。 IsData只是一个暴露为自动实现属性的布尔值,它可以是true或false。
上面回答了第一个问题,它只是一个lambda表达式,其中包含需要在foreach的每次迭代中执行的代码。
对于第二个问题,如果要查找IsData属性的目的,请转到该类(第一个代码块中的类)的IsData方法内部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.