예제 #1
0
파일: ListX.cs 프로젝트: chenmsg/sujin
        /// <summary>
        /// 根据指定项查找字符串。忽略大小写
        /// </summary>
        /// <param name="name">属性名</param>
        /// <param name="value">属性值</param>
        /// <returns></returns>
        public ListX <T> FindAllIgnoreCase(String name, String value)
        {
            if (Count < 1)
            {
                return(null);
            }

            ListX <T> list = new ListX <T>();

            foreach (T item in this)
            {
                if (item == null)
                {
                    continue;
                }
                if (String.Equals((String)GetValue(item, name), value, StringComparison.OrdinalIgnoreCase))
                {
                    list.Add(item);
                }
            }
            if (list == null || list.Count < 1)
            {
                return(null);
            }
            return(list);
        }
예제 #2
0
파일: ListX.cs 프로젝트: chenmsg/sujin
        ///// <summary>
        ///// 拥有指定类型转换器的转换
        ///// </summary>
        ///// <param name="collection"></param>
        ///// <param name="func"></param>
        ///// <returns></returns>
        //public static ListX<T> From(IEnumerable collection, Func<Object, T> func)
        //{
        //    if (collection == null || collection.GetEnumerator() == null || collection.GetEnumerator().Current == null) return null;

        //    ListX<T> list = new ListX<T>();
        //    foreach (Object item in collection)
        //    {
        //        if (func == null)
        //            list.Add((T)item);
        //        else
        //            list.Add(func(item));
        //    }
        //    if (list == null || list.Count < 1) return null;
        //    return list;
        //}

        /// <summary>
        /// 拥有指定类型转换器的转换
        /// </summary>
        /// <typeparam name="T2"></typeparam>
        /// <param name="collection"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        public static ListX <T> From <T2>(IEnumerable collection, ITOrm.Core.Reflection.Func <T2, T> func)
        {
            if (collection == null || collection.GetEnumerator() == null)
            {
                return(null);
            }

            ListX <T> list = new ListX <T>();

            foreach (T2 item in collection)
            {
                if (item == null)
                {
                    continue;
                }
                T entity = default(T);
                if (func == null)
                {
                    entity = (T)(Object)item;
                }
                else
                {
                    entity = func(item);
                }
                if (entity != null)
                {
                    list.Add(entity);
                }
            }
            if (list == null || list.Count < 1)
            {
                return(null);
            }
            return(list);
        }
예제 #3
0
파일: ListX.cs 프로젝트: chenmsg/sujin
        /// <summary>
        /// 根据指定项查找
        /// </summary>
        /// <param name="name">属性名</param>
        /// <param name="value">属性值</param>
        /// <returns></returns>
        public ListX <T> FindAll(String name, Object value)
        {
            if (Count < 1)
            {
                return(null);
            }

            ListX <T> list = new ListX <T>();

            foreach (T item in this)
            {
                if (item == null)
                {
                    continue;
                }
                //if (Object.Equals(GetValue(item, name), value)) list.Add(item);
                if (Object.Equals(GetValue(item, name), value))
                {
                    list.Add(item);
                }
            }
            if (list == null || list.Count < 1)
            {
                return(null);
            }
            return(list);
        }
예제 #4
0
파일: ListX.cs 프로젝트: chenmsg/sujin
        /// <summary>
        /// 检索与指定谓词定义的条件匹配的所有元素。
        /// </summary>
        /// <param name="match">条件</param>
        /// <returns></returns>
        public new ListX <T> FindAll(Predicate <T> match)
        {
            if (Count < 1)
            {
                return(null);
            }

            ListX <T> list = new ListX <T>();

            foreach (T item in this)
            {
                if (item == null)
                {
                    continue;
                }
                if (match(item))
                {
                    list.Add(item);
                }
            }
            if (list == null || list.Count < 1)
            {
                return(null);
            }
            return(list);
        }
예제 #5
0
파일: TypeX.cs 프로젝트: chenmsg/sujin
        //static ListX<MemberInfo> GetMembers(Type type)
        //{
        //    ListX<MemberInfo> list = new ListX<MemberInfo>();
        //    MemberInfo[] mis = type.GetMembers(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
        //    if (mis != null && mis.Length > 0) list.AddRange(mis);

        //    if (type.BaseType != null)
        //    {
        //        ListX<MemberInfo> list2 = GetMembers(type.BaseType);
        //        if (list2 != null) list.AddRange(list2);
        //    }

        //    if (list.Count < 1) return null;
        //    return list;
        //}

        ListX <T> GetMembers <T>(MemberTypes memberType) where T : MemberInfo
        {
            if (Members == null || Members.Count < 1)
            {
                return(null);
            }

            ListX <T> list = new ListX <T>();

            foreach (MemberInfo item in Members)
            {
                if (item.MemberType == memberType)
                {
                    list.Add(item as T);
                }
            }
            return(list.Count > 0 ? list : null);
        }
예제 #6
0
파일: AssemblyX.cs 프로젝트: chenmsg/sujin
        /// <summary>
        /// 查找插件,带缓存
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public ListX <Type> FindPlugins(Type type)
        {
            ListX <Type> list = null;

            if (_plugins.TryGetValue(type, out list))
            {
                return(list);
            }
            lock (_plugins)
            {
                if (_plugins.TryGetValue(type, out list))
                {
                    return(list);
                }

                ListX <TypeX> list2 = TypeXs;
                if (list2 == null || list2.Count < 1)
                {
                    list = null;
                }
                else
                {
                    list = new ListX <Type>();
                    foreach (TypeX item in list2)
                    {
                        if (item.IsPlugin(type))
                        {
                            list.Add(item.Type);
                        }
                    }
                    if (list.Count <= 0)
                    {
                        list = null;
                    }
                }

                _plugins.Add(type, list);

                return(list);
            }
        }
예제 #7
0
파일: AssemblyX.cs 프로젝트: chenmsg/sujin
        /// <summary>
        /// 只反射加载有效路径(应用程序是当前路径,Web是Bin目录)的所有程序集
        /// </summary>
        /// <param name="domain"></param>
        /// <returns></returns>
        public static ListX <AssemblyX> ReflectionOnlyGetAssemblies(AppDomain domain)
        {
            if (domain == null)
            {
                domain = AppDomain.CurrentDomain;
            }

            Assembly[] asms = domain.ReflectionOnlyGetAssemblies();
            if (asms == null || asms.Length < 1)
            {
                return(null);
            }

            ListX <AssemblyX> list = new ListX <AssemblyX>();

            foreach (Assembly item in asms)
            {
                list.Add(AssemblyX.Create(item));
            }

            return(list);
        }
예제 #8
0
파일: ListX.cs 프로젝트: chenmsg/sujin
        /// <summary>
        /// 集合相减
        /// </summary>
        /// <param name="list1">第一个实体集合</param>
        /// <param name="list2">第二个实体集合</param>
        /// <returns></returns>
        public static ListX <T> operator -(ListX <T> list1, ListX <T> list2)
        {
            if (list1 == null || list1.Count < 1)
            {
                return(null);
            }

            ListX <T> list = new ListX <T>();

            foreach (T item in list1)
            {
                if (list2 != null && !list2.Contains(item))
                {
                    list.Add(item);
                }
            }

            if (list == null || list.Count < 1)
            {
                return(null);
            }

            return(list);
        }
예제 #9
0
파일: AssemblyX.cs 프로젝트: chenmsg/sujin
        /// <summary>
        /// 只反射加载指定路径的所有程序集
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static ListX <AssemblyX> ReflectionOnlyLoad(String path)
        {
            if (!Directory.Exists(path))
            {
                return(null);
            }

            String[] ss = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly);
            if (ss == null || ss.Length < 1)
            {
                return(null);
            }

            //AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);

            //try
            {
                ListX <AssemblyX> loadeds  = AssemblyX.GetAssemblies();
                ListX <AssemblyX> loadeds2 = AssemblyX.ReflectionOnlyGetAssemblies();

                ListX <AssemblyX> list = new ListX <AssemblyX>();
                foreach (String item in ss)
                {
                    if (!item.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) &&
                        !item.EndsWith(".exe", StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }

                    if (loadeds != null && loadeds.Exists(delegate(AssemblyX elm)
                    {
                        return(item.Equals(elm.Asm.Location, StringComparison.OrdinalIgnoreCase));
                    }))
                    {
                        continue;
                    }

                    if (loadeds2 != null && loadeds2.Exists(delegate(AssemblyX elm)
                    {
                        return(item.Equals(elm.Asm.Location, StringComparison.OrdinalIgnoreCase));
                    }))
                    {
                        continue;
                    }

                    try
                    {
                        //Assembly asm = Assembly.ReflectionOnlyLoad(File.ReadAllBytes(item));
                        Assembly asm = Assembly.ReflectionOnlyLoadFrom(item);

                        list.Add(AssemblyX.Create(asm));
                    }
                    catch { }
                }

                return(list);
            }
            //finally
            //{
            //    AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve -= new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
            //}
        }