VisualBasicValue.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 / Microsoft / VisualBasic / Activities / VisualBasicValue.cs / 1305376 / VisualBasicValue.cs

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

namespace Microsoft.VisualBasic.Activities 
{
    using System; 
    using System.Activities; 
    using System.Activities.ExpressionParser;
    using System.Activities.XamlIntegration; 
    using System.Linq.Expressions;
    using System.Windows.Markup;

    public sealed class VisualBasicValue : CodeActivity, IValueSerializableExpression, IExpressionContainer, IVisualBasicExpression 
    {
        Expression> expressionTree; 
        Func compiledExpression; 

        public VisualBasicValue() 
            : base()
        {
            this.SkipArgumentResolution = true;
        } 

        public VisualBasicValue(string expressionText) 
            : this() 
        {
            this.ExpressionText = expressionText; 
        }

        public string ExpressionText
        { 
            get;
            set; 
        } 

        Expression IExpressionContainer.Expression 
        {
            get { return this.expressionTree; }
        }
 
        protected override TResult Execute(CodeActivityContext context)
        { 
            if (this.expressionTree != null) 
            {
                return GetValueCore(context); 
            }
            else
            {
                return default(TResult); 
            }
        } 
 
        internal override bool TryGetValue(ActivityContext context, out TResult value)
        { 
            if (!this.SkipArgumentResolution && this.RuntimeArguments.Count > 1)
            {
                // We can't fast path because we have arguments other than the result
                // and we haven't obtained inlined references 
                value = default(TResult);
                return false; 
            } 

            value = GetValueCore(context); 
            return true;
        }

        TResult GetValueCore(ActivityContext context) 
        {
            if (this.compiledExpression == null) 
            { 
                if (this.expressionTree == null)
                { 
                    return default(TResult);
                }

                this.compiledExpression = this.expressionTree.Compile(); 
            }
 
            return this.compiledExpression(context); 
        }
 
        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
            this.expressionTree = null;
 
            try
            { 
                this.expressionTree = VisualBasicHelper.Compile(this.ExpressionText, metadata); 
            }
            catch (SourceExpressionException e) 
            {
                metadata.AddValidationError(e.Message);
            }
        } 

        public bool CanConvertToString(IValueSerializerContext context) 
        { 
            // we can always convert to a string
            return true; 
        }

        public string ConvertToString(IValueSerializerContext context)
        { 
            // Return our bracket-escaped text
            return "[" + this.ExpressionText + "]"; 
        } 
    }
} 

// 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