Проблемы с пониманием foreach (x =>) синтаксиса - PullRequest
1 голос
/ 05 декабря 2011

Я новичок в 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 (х => ...);

  2. Я не понимаю, как работает это утверждение (singleFile.IsData ), поскольку определение всего лишь: public bool IsData { get; set; } Другими словами, что разработчик пытался найти?Что означает IsData?Собирался ли он посмотреть, соответствует ли это критерию (например, синтаксис имени файла)?

Ответы [ 6 ]

4 голосов
/ 05 декабря 2011

Это то же самое, что

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

IsData - это автоматическое свойство.Посмотри ...

2 голосов
/ 05 декабря 2011
  1. x => ... называется выражением lambda .Он просто говорит «для каждого элемента, назовите его« x »и передайте его следующему коду».

  2. Было объяснено достаточно, стоит только отметить, что хотя это гораздо короче, чтобы написатьвам нужно установить параметры по умолчанию в конструкторе, а не непосредственно в поле члена, потому что у вас его нет.И вы даже можете использовать эти автоматизированные свойства с частным установщиком.

2 голосов
/ 05 декабря 2011
  1. См. Вступительную статью о лямбда-выражениях: 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;}
    }
    
2 голосов
/ 05 декабря 2011
  1. List.ForEach () принимает делегата, который будет выполняться для каждого элемента в списке, в блоке кода вашего случая после выполнения => для каждого элемента в nameFile список, а x будет переменной элемента.
  2. Это автоматическое определение свойства, для вас будет создано вспомогательное поле, поэтому вы можете использовать его без определения поля вручную

Возможно, вы найдете полезную статью: «foreach» против «ForEach»

1 голос
/ 05 декабря 2011

На первый вопрос дан ответ выше, это просто лямбда-выражение, содержащее код, который должен выполняться на каждой итерации foreach.

Для второго вопроса, если вы ищете назначение свойства IsData, перейдитевнутри метода IsData в этом классе (класс в первом блоке кода).

1 голос
/ 05 декабря 2011

ForEach - это метод расширения и часть System.Linq (правка: , есть один в списке , который выполняет действие, но System.Linqимеет дополнительные расширения).Он работает по списку.Бит x => является частью лямбда-выражения .IsData - это просто логическое значение, представляемое как автоматически реализованное свойство ... оно может быть истинным или ложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...