Switch.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / Switch.cs / 1305376 / Switch.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------

namespace System.Activities.Statements 
{
    using System; 
    using System.Activities; 
    using System.Collections.Generic;
    using System.Collections.ObjectModel; 
    using System.ComponentModel;
    using System.Linq.Expressions;
    using System.Windows.Markup;
    using System.Runtime; 

    [ContentProperty("Cases")] 
    public sealed class Switch : NativeActivity 
    {
        IDictionary cases; 

        public Switch()
        {
        } 

        public Switch(Expression> expression) 
            : this() 
        {
            if (expression == null) 
            {
                throw FxTrace.Exception.ArgumentNull("expression");
            }
 
            this.Expression = new InArgument(expression);
        } 
 
        public Switch(Activity expression)
            : this() 
        {
            if (expression == null)
            {
                throw FxTrace.Exception.ArgumentNull("expression"); 
            }
 
            this.Expression = new InArgument(expression); 
        }
 
        public Switch(InArgument expression)
            : this()
        {
            if (expression == null) 
            {
                throw FxTrace.Exception.ArgumentNull("expression"); 
            } 

            this.Expression = expression; 
        }

        [RequiredArgument]
        [DefaultValue(null)] 
        public InArgument Expression
        { 
            get; 
            set;
        } 

        public IDictionary Cases
        {
            get 
            {
                if (this.cases == null) 
                { 
                    this.cases = new CasesDictionary();
                } 
                return this.cases;
            }
        }
 
        [DefaultValue(null)]
        public Activity Default 
        { 
            get;
            set; 
        }

        protected override void CacheMetadata(NativeActivityMetadata metadata)
        { 
            RuntimeArgument expressionArgument = new RuntimeArgument("Expression", typeof(T), ArgumentDirection.In, true);
            metadata.Bind(Expression, expressionArgument); 
            metadata.SetArgumentsCollection(new Collection { expressionArgument }); 

            Collection children = new Collection(); 

            foreach (Activity child in Cases.Values)
            {
                children.Add(child); 
            }
 
            if (Default != null) 
            {
                children.Add(Default); 
            }

            metadata.SetChildrenCollection(children);
        } 

        protected override void Execute(NativeActivityContext context) 
        { 
            T result = Expression.Get(context);
            Activity selection = null; 

            if (!Cases.TryGetValue(result, out selection))
            {
                if (this.Default != null) 
                {
                    selection = this.Default; 
                } 
                else
                { 
                    if (TD.SwitchCaseNotFoundIsEnabled())
                    {
                        TD.SwitchCaseNotFound(this.DisplayName);
                    } 
                }
            } 
 
            if (selection != null)
            { 
                context.ScheduleActivity(selection);
            }
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK