Amnesia.SerializationUtil.MakeSerializable C# (CSharp) Метод

MakeSerializable() публичный статический Метод

Removes non-public method targets from a delegate so that they can be safely serialized.
public static MakeSerializable ( Delegate d ) : Delegate
d System.Delegate The multicast or singlecast delegate to process
Результат System.Delegate
        public static Delegate MakeSerializable(Delegate d)
        {
            if (d == null)
                return null;

            Delegate[] children = d.GetInvocationList();

            if (children.Length == 0)
                return null;
            else if (children.Length == 1 && d == children[0])
            {
                // Non-combined delegate
                if (d.Method.IsPublic)
                    return d;
                else
                    return null;
            }
            else
            {
                ArrayList publicChildren = new ArrayList(children.Length);

                foreach (Delegate child in children)
                {
                    Delegate publicChild = MakeSerializable(child);

                    if (publicChild != null)
                        publicChildren.Add(publicChild);
                }

                if (publicChildren.Count == 0)
                    return null;
                else if (publicChildren.Count == 1)
                    return (Delegate)publicChildren[0];
                else
                {
                    Delegate[] publicChildrenArray = new Delegate[publicChildren.Count];
                    for (int i = 0; i < publicChildren.Count; ++i)
                        publicChildrenArray[i] = (Delegate)publicChildren[i];

                    return Delegate.Combine(publicChildrenArray);
                }
            }
        }