Вам просто нужно переместить поле GreatThan10 в вашей программе класса. Первая строка вашего кода просто для определения нового делегата, который принимает параметр int и возвращает bool. Вместо этого GreatThan10 является ссылкой на этот тип делегата, поэтому он должен быть членом класса.
Вы также спросили, совпадает ли делегат с функциями обратного вызова PHP. Я бы сказал, что делегат - это тип, представляющий ссылку на методы. Вы объявляете его с некоторыми параметрами и с типом возврата, а затем можете создавать новые ссылки на этот делегат, которые указывают на некоторые методы с тем же типом параметров и типом возврата.
Попробуйте это решение, и у вас не должно возникнуть проблем.
using System;
using System.Collections.Generic;
delegate bool Function(int n);
class Program
{
static Function GreatThan10 = delegate(int n) { return n > 10; };
static void Main(string[] args)
{
List<int> list = new List<int>();
Traverse(list, GreatThan10);
Console.ReadKey();
}
static List<int> Traverse(List<int> myList, Function function)
{
var list = new List<int>();
foreach (var item in myList)
{
if (function(item))
{
list.Add(item);
}
}
return list;
}
}