У меня есть класс, который создает List<Action<int>>
и держится за них до более позднего времени. Этот класс может добавлять и удалять делегаты из этого списка. Это работает хорошо, пока люди не слишком причудливы. Для борьбы с анонимной функцией (которая не может быть удалена) я проверяю, что цель делегата равна нулю. Если его значение null, я выдаю исключение. Проблема возникает, когда есть анонимный делегат, содержащий функцию. У этого есть цель, но такая же неустранима. Упрощена ниже код иллюстрирует мои вопросыКак идентифицировать анонимную функцию
public class MyDelegateContainer
{
List<Action<int>> m_Container = new List<Action<int>>();
public void Add(Action<int> del)
{
if (del.Target == null)
{
throw new Exception("No static handlers");
}
m_Container.Add(del);
}
public bool Remove(Action<int> del)
{
if (m_Container.Contains(del))
{
m_Container.Remove(del);
return true;
}
return false;
}
}
public class MyFakeActionClass
{
public void Test(int temp) { }
}
class Program
{
static void Main(string[] args)
{
bool removed = false;
int counter = 0;
MyDelegateContainer container = new MyDelegateContainer();
MyFakeActionClass fake = new MyFakeActionClass();
//container.Add(p => { }); //Throws, this is what I want to happen
container.Add(fake.Test); //Works, this is the use case
removed = container.Remove(fake.Test); //Works, this is the use case
Debug.Assert(removed);
container.Add(p => { fake.Test(p); counter++; }); //Works but I would like it not to
removed = container.Remove(p => { fake.Test(p); counter++; }); //doesn't work
Debug.Assert(removed);
}
}
мне нужен какой-то способ, чтобы определить
p => { fake.Test(p); counter++; }
является анонимная функция, так что я могу бросить, если кто-то пытается его. Спасибо за любую помощь.
EDIT: Я должен отметить, что для анонимной функции я мог бы использовать переменную Action<int>
, и все будет работать, но добавление и удаление никогда не будут в той же области на практике.
Если это определено, это не является анонимным. Вы ищете закрытие вместо? K – 2010-11-30 19:45:30
Мне нужно каким-то образом обнаружить, что его анонимная функция – Steve 2010-11-30 19:46:26
@Steve - 28 вопросов без принятого ответа из 83 ?! O_O И я только говорю, что у вас есть хороший балл =) – BeemerGuy 2010-11-30 19:48:20