Beispiel #1
0
        DelegateSerializationHolder(SerializationInfo info, StreamingContext ctx)
        {
            DelegateEntry entryChain = (DelegateEntry)info.GetValue("Delegate", typeof(DelegateEntry));

            // Count the number of delegates to combine
            int           count = 0;
            DelegateEntry entry = entryChain;

            while (entry != null)
            {
                entry = entry.delegateEntry;
                count++;
            }

            // Deserializes and combines the delegates
            if (count == 1)
            {
                _delegate = entryChain.DeserializeDelegate(info);
            }
            else
            {
                Delegate[] delegates = new Delegate[count];
                entry = entryChain;
                for (int n = 0; n < count; n++)
                {
                    delegates[n] = entry.DeserializeDelegate(info);
                    entry        = entry.delegateEntry;
                }
                _delegate = Delegate.Combine(delegates);
            }
        }