MemberExpressionHelper.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 / Expressions / MemberExpressionHelper.cs / 1305376 / MemberExpressionHelper.cs

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

namespace System.Activities.Expressions 
{
    using System.Activities.Statements; 
    using System.Collections.Generic; 
    using System.Linq.Expressions;
    using System.Reflection; 
    using System.Runtime;
    using System.Collections.ObjectModel;
    using System.Activities.Validation;
 
    static class MemberExpressionHelper
    { 
        public static void AddOperandArgument(CodeActivityMetadata metadata, InArgument operand, bool isRequired) 
        {
            RuntimeArgument operandArgument = new RuntimeArgument("Operand", typeof(TOperand), ArgumentDirection.In, isRequired); 
            metadata.Bind(operand, operandArgument);
            metadata.AddArgument(operandArgument);
        }
 
        public static void AddOperandLocationArgument(CodeActivityMetadata metadata, InOutArgument operandLocation, bool isRequired)
        { 
            RuntimeArgument operandLocationArgument = new RuntimeArgument("OperandLocation", typeof(TOperand), ArgumentDirection.InOut, isRequired); 
            metadata.Bind(operandLocation, operandLocationArgument);
            metadata.AddArgument(operandLocationArgument); 
        }

        public static bool TryGenerateLinqDelegate(string memberName, bool isField, bool isStatic, out Func operation, out ValidationError validationError)
        { 
            operation = null;
            validationError = null; 
 
            try
            { 
                ParameterExpression operandParameter = Expression.Parameter(typeof(TOperand), "operand");
                MemberExpression memberExpression = null;
                if (isStatic)
                { 
                    memberExpression = Expression.MakeMemberAccess(null, GetMemberInfo(memberName, isField));
                } 
                else 
                {
                    memberExpression = Expression.MakeMemberAccess(operandParameter, GetMemberInfo(memberName, isField)); 
                }
                Expression> lambdaExpression = Expression.Lambda>(memberExpression, operandParameter);
                operation = lambdaExpression.Compile();
                return true; 
            }
            catch (Exception e) 
            { 
                if (Fx.IsFatal(e))
                { 
                    throw;
                }

                validationError = new ValidationError(e.Message); 
                return false;
            } 
        } 

        static MemberInfo GetMemberInfo(string memberName, bool isField) 
        {
            MemberInfo result = null;
            Type declaringType = typeof(TOperand);
 
            if (!isField)
            { 
                result = declaringType.GetProperty(memberName); 
            }
            else 
            {
                result = declaringType.GetField(memberName);
            }
            if (result == null) 
            {
                throw FxTrace.Exception.AsError(new ValidationException(SR.MemberNotFound(memberName, typeof(TOperand).Name))); 
            } 
            return result;
        } 


    }
 
}

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