Да, сохранить его в переменной и отцепить.
DelegateType evt = (o, e) => { firedCount++; Console.Write(firedCount); };
foo.AnEvent += evt;
foo.MethodThatFiresAnEvent();
foo.AnEvent -= evt;
И да, если вы этого не сделаете, у вас будет утечка памяти, поскольку вы каждый раз будете подключать новый объект делегата. Вы также заметите это, потому что каждый раз, когда вы вызываете этот метод, он выводит на консоль все большее число строк (не только увеличивающееся число, но за один вызов метода MethodThatFiresAnEvent он будет сбрасывать любое количество элементов, один раз для каждый подключил анонимный метод).