示例#1
0
        public void TypeTraversalTraverseTest()
        {
            string fullName = string.Empty;
            Dictionary <string, MethodInfo>   methods            = new Dictionary <string, MethodInfo>();
            Dictionary <string, PropertyInfo> properties         = new Dictionary <string, PropertyInfo>();
            Dictionary <string, PropertyInfo> delegateProperties = new Dictionary <string, PropertyInfo>();
            Dictionary <string, FieldInfo>    fields             = new Dictionary <string, FieldInfo>();
            Dictionary <string, Type>         nestedTypes        = new Dictionary <string, Type>();

            Type type = typeof(SimpleType);

            TypeTraversal typeTraversal = new TypeTraversal
            {
                // Excluded types
                IsExcludedType = t => { return(false); }, // No types are excluded
                // OnType handler
                OnBeginType = (trav, t) =>
                {
                    fullName = t.FullName;
                    return(true);
                },
                // OnMethod handler
                OnMethod = (trav, t, methodInfo) =>
                {
                    methods.Add(methodInfo.Name, methodInfo);
                },
                // OnProperty handler
                OnProperty = (trav, t, propertyInfo) =>
                {
                    properties.Add(propertyInfo.Name, propertyInfo);
                },
                // OnProperty delegate handler
                OnPropertyDelegate = (trav, t, propertyInfo) =>
                {
                    delegateProperties.Add(propertyInfo.Name, propertyInfo);
                },
                // OnField handler
                OnField = (trav, t, fieldInfo) =>
                {
                    fields.Add(fieldInfo.Name, fieldInfo);
                },
                // Nested type handler
                OnNestedType = (trav, nestedType) =>
                {
                    nestedTypes.Add(nestedType.Name, nestedType);
                }
            };

            typeTraversal.Traverse(type);

            Assert.AreEqual(type.FullName, fullName);

            Assert.IsNotNull(methods["AMethod"]);
            Assert.IsNotNull(properties["StringProperty"]);
            Assert.IsNotNull(delegateProperties["DelegateProperty"]);
            Assert.IsNotNull(fields["integerField"]);
            Assert.IsNotNull(nestedTypes["AnEnumeration"]);
        }
示例#2
0
            public Traversal(TypeTraversal type, TreeBinaryNode <T> t)
            {
                switch ((int)type)
                {
                case 0:
                    preOrderTraversal(t);
                    break;

                case 1:
                    inOrderTraversal(t);
                    break;

                case 2:
                    postOrderTraversal(t);
                    break;
                }
            }