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

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

namespace System.Activities.Expressions 
{
    using System.Activities.Validation; 
    using System.Collections.Generic; 
    using System.Linq.Expressions;
    using System.Runtime; 
    using System.Collections.ObjectModel;
    using System.Reflection;

    static class IndexerHelper 
    {
        public static void OnGetArguments(Collection indices, OutArgument> result, CodeActivityMetadata metadata) 
        { 
            for (int i = 0; i < indices.Count; i++)
            { 
                RuntimeArgument indexArgument = new RuntimeArgument("Index" + i, indices[i].ArgumentType, ArgumentDirection.In, true);
                metadata.Bind(indices[i], indexArgument);
                metadata.AddArgument(indexArgument);
            } 

            RuntimeArgument resultArgument = new RuntimeArgument("Result", typeof(Location), ArgumentDirection.Out); 
            metadata.Bind(result, resultArgument); 
            metadata.AddArgument(resultArgument);
        } 
        public static void CacheMethod(Collection indices, ref MethodInfo getMethod, ref MethodInfo setMethod)
        {
            Type[] getTypes = new Type[indices.Count];
            for (int i = 0; i < indices.Count; i++) 
            {
                getTypes[i] = indices[i].ArgumentType; 
            } 

            getMethod = typeof(TOperand).GetMethod("get_Item", getTypes); 
            if (getMethod != null && !getMethod.IsSpecialName)
            {
                getMethod = null;
            } 

            Type[] setTypes = new Type[indices.Count + 1]; 
            for (int i = 0; i < indices.Count; i++) 
            {
                setTypes[i] = indices[i].ArgumentType; 
            }
            setTypes[setTypes.Length - 1] = typeof(TItem);
            setMethod = typeof(TOperand).GetMethod("set_Item", setTypes);
            if (setMethod != null && !setMethod.IsSpecialName) 
            {
                setMethod = null; 
            } 
        }
 
    }

}

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