public virtual void ChainSelector(ISurrogateSelector selector)
        {
            if (selector == null)
            {
                throw new ArgumentNullException("selector");
            }
            if (selector == this)
            {
                throw new SerializationException(Environment.GetResourceString("Serialization_DuplicateSelector"));
            }
            if (!SurrogateSelector.HasCycle(selector))
            {
                throw new ArgumentException(Environment.GetResourceString("Serialization_SurrogateCycleInArgument"), "selector");
            }
            ISurrogateSelector surrogateSelector  = selector.GetNextSelector();
            ISurrogateSelector surrogateSelector2 = selector;

            while (surrogateSelector != null && surrogateSelector != this)
            {
                surrogateSelector2 = surrogateSelector;
                surrogateSelector  = surrogateSelector.GetNextSelector();
            }
            if (surrogateSelector == this)
            {
                throw new ArgumentException(Environment.GetResourceString("Serialization_SurrogateCycle"), "selector");
            }
            surrogateSelector = selector;
            ISurrogateSelector surrogateSelector3 = selector;

            while (surrogateSelector != null)
            {
                if (surrogateSelector == surrogateSelector2)
                {
                    surrogateSelector = this.GetNextSelector();
                }
                else
                {
                    surrogateSelector = surrogateSelector.GetNextSelector();
                }
                if (surrogateSelector == null)
                {
                    break;
                }
                if (surrogateSelector == surrogateSelector3)
                {
                    throw new ArgumentException(Environment.GetResourceString("Serialization_SurrogateCycle"), "selector");
                }
                if (surrogateSelector == surrogateSelector2)
                {
                    surrogateSelector = this.GetNextSelector();
                }
                else
                {
                    surrogateSelector = surrogateSelector.GetNextSelector();
                }
                if (surrogateSelector3 == surrogateSelector2)
                {
                    surrogateSelector3 = this.GetNextSelector();
                }
                else
                {
                    surrogateSelector3 = surrogateSelector3.GetNextSelector();
                }
                if (surrogateSelector == surrogateSelector3)
                {
                    throw new ArgumentException(Environment.GetResourceString("Serialization_SurrogateCycle"), "selector");
                }
            }
            ISurrogateSelector nextSelector = this.m_nextSelector;

            this.m_nextSelector = selector;
            if (nextSelector != null)
            {
                surrogateSelector2.ChainSelector(nextSelector);
            }
        }
Ejemplo n.º 2
0
        public virtual void ChainSelector(ISurrogateSelector selector)
        {
            if (selector == null)
            {
                throw new ArgumentNullException("selector");
            }
            if (selector == this)
            {
                throw new SerializationException(Environment.GetResourceString("Serialization_DuplicateSelector"));
            }
            if (!SurrogateSelector.HasCycle(selector))
            {
                throw new ArgumentException(Environment.GetResourceString("Serialization_SurrogateCycleInArgument"), "selector");
            }
            ISurrogateSelector nextSelector       = selector.GetNextSelector();
            ISurrogateSelector surrogateSelector1 = selector;

            for (; nextSelector != null && nextSelector != this; nextSelector = nextSelector.GetNextSelector())
            {
                surrogateSelector1 = nextSelector;
            }
            if (nextSelector == this)
            {
                throw new ArgumentException(Environment.GetResourceString("Serialization_SurrogateCycle"), "selector");
            }
            ISurrogateSelector surrogateSelector2 = selector;
            ISurrogateSelector surrogateSelector3 = selector;

            while (surrogateSelector2 != null)
            {
                ISurrogateSelector surrogateSelector4 = surrogateSelector2 != surrogateSelector1?surrogateSelector2.GetNextSelector() : this.GetNextSelector();

                if (surrogateSelector4 != null)
                {
                    if (surrogateSelector4 == surrogateSelector3)
                    {
                        throw new ArgumentException(Environment.GetResourceString("Serialization_SurrogateCycle"), "selector");
                    }
                    surrogateSelector2 = surrogateSelector4 != surrogateSelector1?surrogateSelector4.GetNextSelector() : this.GetNextSelector();

                    surrogateSelector3 = surrogateSelector3 != surrogateSelector1?surrogateSelector3.GetNextSelector() : this.GetNextSelector();

                    if (surrogateSelector2 == surrogateSelector3)
                    {
                        throw new ArgumentException(Environment.GetResourceString("Serialization_SurrogateCycle"), "selector");
                    }
                }
                else
                {
                    break;
                }
            }
            ISurrogateSelector selector1 = this.m_nextSelector;

            this.m_nextSelector = selector;
            if (selector1 == null)
            {
                return;
            }
            surrogateSelector1.ChainSelector(selector1);
        }