Нет, насколько мне известно, пустой, но ненулевой делегат будет по-прежнему вызываться.
Что касается вашей отписки: предоставьте пример кода.(Я предоставлю пример кода, показывающего обратное через минуту.)
using System;
class Test
{
static void Main()
{
Action action = EmptyMethod;
Console.WriteLine(action.GetInvocationList().Length);
action += NonEmptyMethod;
action -= NonEmptyMethod;
Console.WriteLine(action.GetInvocationList().Length);
}
static void EmptyMethod() {}
static void NonEmptyMethod()
{
Console.WriteLine("Testing");
}
}
Это просто печатает 1 дважды - показывая один «пустой» обработчик до и после цикла подписки / отмены подписки.
Я уверен, что когда вы разместите аналогичный пример, который показывает, что вы имеете в виду, мы сможем легко объяснить ваши результаты.