Теперь, когда у нас есть лямбда-выражения, вывод типов и некоторые другие вещи, есть идиома, распространенная в других языках, которая теперь имеет большой смысл в C #. Ваш пример был о том, как открыть файл, что-то с ним сделать, а затем закрыть. Что ж, теперь вы можете создать вспомогательный метод, который открывает файл, а также заботится о том, чтобы обеспечить его закрытие / удаление / очистку, но вызывает лямбду, которую вы предоставляете для части «делать вещи». Это поможет вам собрать сложные вещи try / catch / finally dispose / cleanup прямо в одном месте, а затем использовать их снова и снова.
Вот пример:
public static void ProcessFile(string filePath, Action<File> fileProcessor)
{
File openFile = null;
try
{
openFile = File.Open(filePath); // I'm making this up ... point is you are acquiring a resource that needs to be cleaned up after.
fileProcessor(openFile);
}
finally
{
openFile.Close(); // Or dispose, or whatever.
}
}
Теперь, вызывающие этот метод не должны беспокоиться о том, как открыть файл или закрыть / удалить его. Они могут сделать что-то вроде этого:
Helpers.ProcessFile("C://somefile.txt", f =>
{
while(var text = f.ReadLine())
{
Console.WriteLine(text);
}
});