C #
myList<string>().ForEach(
delegate(string name)
{
Console.WriteLine(name);
});
Анонимные делегаты в настоящее время не реализованы в VB.Net, но и C #, и VB.Net должны иметь возможность выполнять лямбда-выражения:
C #
myList<string>().ForEach(name => Console.WriteLine(name));
VB.Net
myList(Of String)().ForEach(Function(name) Console.WriteLine(name))
Как указал Грауэнольф, вышеприведенный VB не будет компилироваться, поскольку лямбда не возвращает значение. Обычный цикл ForEach, как предлагали другие, на данный момент, вероятно, самый простой, но, как обычно, требуется блок кода, чтобы сделать то, что C # может сделать в одной строке.
Вот банальный пример того, почему это может быть полезно: это дает вам возможность передавать логику цикла из другой области видимости, чем там, где существует IEnumerable, так что вам даже не нужно показывать ее, если вы не хотите к.
Допустим, у вас есть список относительных путей URL, которые вы хотите сделать абсолютными:
public IEnumerable<String> Paths(Func<String> formatter) {
List<String> paths = new List<String>()
{
"/about", "/contact", "/services"
};
return paths.ForEach(formatter);
}
Итак, вы можете вызвать функцию следующим образом:
var hostname = "myhost.com";
var formatter = f => String.Format("http://{0}{1}", hostname, f);
IEnumerable<String> absolutePaths = Paths(formatter);
Даю вам "http://myhost.com/about", "http://myhost.com/contact"
и т. Д. Очевидно, что в этом конкретном примере есть лучшие способы сделать это, я просто пытаюсь продемонстрировать основной принцип.