Mark Taparauskus is the author of DevelopMentor’s Programming C# course. As you might expect of someone with those credentials, he knows a lot about C#. He’s been making a habit recently of posting interesting little tidbits he finds to one of the internal mailing lists. This one concerns the use of the “-“ and “-=” operators on delegates. You may have see this usage before, as in:
delegate void Blah(int i, string s);
Blah b1 = new Blah(Foo.Bar);
Blah b2 = new Blah(Foo.Quux);
Blah b3 = b1 + b2; // Chain two delegates together: b3 = (b1 b2)
Blah b4 = b3 - b1; // Remove b1 from the chain: b4 = (b2)
As Mark has no homepage or blog (yet), he’s given me permission to repost his findings here:
Here are two random facts about op- and op-= with delegates that I think are interesting.
1. The *last* occurrence is removed:
(a b a) - (a) = (a b)
2. The right hand side has to be a contiguous sublist of the left side or nothing happens. A contiguous sublist just means the same elements in the same order.
So this one works as expected:
(a b c d) - (b c) = (a d)
But nothing gets removed here:
(a b c d) - (a c) = (a b c d)