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

时间:2011-12-05 15:04:38

标签: c# visual-studio-2010 foreach

我是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定义的代码片段:

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; } 换句话说,开发人员试图寻找什么? IsData是什么意思?他是否打算查看它是否符合标准(如文件名语法)?

6 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

  1. List.ForEach()接受将为=>列表中的每个项目执行nameFile之后的案例代码块中列表中每个项目执行的委托,以及x将是一个项目变量。
  2. 这是自动属性定义,后台将为您生成支持字段,这就是为什么您可以在不手动定义字段的情况下使用它
  3. 您可能会找到有用的文章:“foreach” vs “ForEach”

答案 2 :(得分:2)

  1. 请参阅有关lambda表达式的这篇介绍文章:http://msdn.microsoft.com/en-us/library/bb397687.aspx

  2. public bool IsData { get; set; }是一个速记属性声明,类似于写作:

    private bool _isData;
    public bool IsData 
    { 
       get {return _isData;}
       set {_isData = value;}
    }
    

答案 3 :(得分:2)

  1. x => ......被称为lambda表达式。 它只是说“对于每个元素,将其命名为'x'并将其传递给以下代码”。

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

答案 4 :(得分:1)

ForEachextension method,是System.Linq的一部分(编辑:there is one in List,它接受​​一个Action,但System.Linq还有其他扩展名)。它在List上运行。 x => bit是lambda expression的一部分。 auto-implemented property的布尔值...它可以是真或假。

答案 5 :(得分:1)

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

对于第二个问题,如果您正在寻找IsData属性的目的,请进入该类中的IsData方法(第一个代码块中的类)。