C#帮助类

1、集合操作

        // <summary>
        /// 判断一个集合是否包含某个值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="value"></param>
        /// <returns>返回索引值</returns>
        public static int IsContainValue<T>(IEnumerable<T> list, T value)
        {
            return list.ToList<T>().FindIndex(i => i.Equals(value));
        }

2、反射

        /// <summary>
        ///  实例化反射对象
        /// </summary>
        /// <param name="t">如果类型为null,就根据对象获取类型</param>
        /// <param name="obj">如果对象为null,就根据类型实例化对象</param>
        static void JudgeType(ref Type t, ref object obj, ref BindingFlags flags, bool isPublic, bool isStatic)
        {
            if (t != null)
            {
                obj = Activator.CreateInstance(t);
            }
            else
            {
                t = obj.GetType();
            }
            flags = (isStatic ? BindingFlags.Static : BindingFlags.Instance) | (isPublic ? BindingFlags.Public : BindingFlags.NonPublic);
        }

        /// <summary>
        /// 获取对象的属性或者字段的值
        /// </summary>
        /// <param name="t">如果类型为null,就根据对象获取类型</param>
        /// <param name="obj">如果对象为null,就根据类型实例化对象</param>
        /// <param name="name">属性或者字段的名称</param>
        /// <param name="isPublic">是否是public修饰符修饰的</param>
        /// <param name="isStatic">是否是静态的</param>
        /// <returns>返回字段或者属性的值</returns>
        public static object GetFieldOrProperty(Type t, object obj, string name, bool isPublic, bool isStatic)
        {
            BindingFlags flags = BindingFlags.Default;
            JudgeType(ref t, ref  obj, ref flags, isPublic, isStatic);
            FieldInfo fieldInfo = t.GetField(name, flags);
            if (fieldInfo == null)
            {
                PropertyInfo propertyInfo = t.GetProperty(name, flags);
                if (propertyInfo != null)
                {
                    return propertyInfo.GetValue(obj, null);
                }
                return null;
            }
            return fieldInfo.GetValue(obj);
        }

        /// <summary>
        /// 反射执行对象的方法
        /// </summary>
        /// <param name="t">如果类型为null,就根据对象获取类型</param>
        /// <param name="obj">如果对象为null,就根据类型实例化对象</param>
        /// <param name="methodName">方法名称</param>
        /// <param name="parameters">方法参数</param>
        /// <param name="isPublic">是否是public修饰符修饰的</param>
        /// <param name="isStatic">是否是静态的</param>
        public static void ExecuteMethod(Type t, object obj, string methodName, object[] parameters, bool isPublic, bool isStatic)
        {
            BindingFlags flags = BindingFlags.Default;
            JudgeType(ref t, ref obj, ref flags, isPublic, isStatic);
            MethodInfo methodInfo = t.GetMethod(methodName, flags);
            if (methodInfo != null)
            {
                methodInfo.Invoke(obj, parameters);
            }
        }

        /// <summary>
        /// 得到属性或者字段或者方法的特性
        /// </summary>
        /// <param name="t">如果类型为null,就根据对象获取类型</param>
        /// <param name="obj">如果对象为null,就根据类型实例化对象</param>
        /// <param name="name">名称</param>
        /// <param name="isPublic">是否是public修饰符修饰的</param>
        /// <param name="isStatic">是否是静态的</param>
        /// <returns></returns>
        public static object[] GetCustomAttributes(Type t, object obj, string name, bool isPublic, bool isStatic)
        {
            BindingFlags flags = BindingFlags.Default;
            JudgeType(ref t, ref obj, ref flags, isPublic, isStatic);
            MethodInfo methodInfo = t.GetMethod(name, flags);
            if (methodInfo != null)
            {
                return methodInfo.GetCustomAttributes(false);
            }
            else
            {
                FieldInfo fieldInfo = t.GetField(name, flags);
                if (fieldInfo != null)
                {
                    return fieldInfo.GetCustomAttributes(false);
                }
                else
                {
                    PropertyInfo propertyInfo = t.GetProperty(name, flags);
                    if (propertyInfo != null)
                    {
                        return propertyInfo.GetCustomAttributes(false);
                    }
                    return null;
                }
            }
        }

        /// <summary>
        /// 加载程序集,并实例化对象
        /// </summary>
        /// <param name="dllPath">程序集路径(绝对路径)</param>
        /// <param name="index">为-1,表示要实例化所有对象,不为-1,表示要实例化索引为index的对象</param>
        /// <param name="objList">输出实例化的对象</param>
        /// <returns>返回所有类型</returns>
        public static Type[] GetTypes(string dllPath, int index, ref List<object> objList)
        {
            objList = new List<object>();
            Type[] t;
            object obj;
            Assembly assembly = Assembly.LoadFile(dllPath);
            t = assembly.GetTypes();
            if (index == -1)
            {
                foreach (var item in t)
                {
                    obj = Activator.CreateInstance(item);
                    objList.Add(obj);
                }
            }
            else
            {
                obj = Activator.CreateInstance(t[index]);
                objList.Add(obj);
            }
            return t;
        }

3、序列化

        // JavaScriptSerializer在net3.5中已被标记“过时”,使用这个类,必须引用System.Web.Extensions.dll
        // 新的序列化类“DataContractJsonSerializer”,使用DataContract和DataMember特性来分别标记你要序列化的对象和成员
        // 如果不想序列化某个成员,就标记为 [IgnoreDataMember]
        // 你可以在DataMember属性里用"Name"参数指定名称,例子如下:
        // [DataMember(Name = "First")]
        // public string FirstName { get; set; }
        // 序列化后的结果:{"First":"Chris","LastName":"Pietschmann"} 

        /// <summary>
        /// 序列化,需要引用System.Runtime.Serialization和System.ServiceModel.Web
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string Serialize<T>(T obj)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                string result = string.Empty;
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
                serializer.WriteObject(stream, obj);
                result = Convert.ToBase64String(stream.ToArray(), Base64FormattingOptions.None);
                return result;
            }
        }

        /// <summary>
        /// 反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="str"></param>
        /// <returns></returns>
        public static T Deserialize<T>(string str)
        {
            //T obj = Activator.CreateInstance<T>();
            using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(str)))
            {
                DataContractJsonSerializer deserialize = new DataContractJsonSerializer(typeof(T));
                var obj = (T)deserialize.ReadObject(stream);
                return obj;
            }
        }

4、网页

        /// <summary>
        /// 获取网页源文件
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GetWebContent(string url)
        {
            System.Net.WebClient wc = new System.Net.WebClient();
            wc.Credentials = System.Net.CredentialCache.DefaultCredentials;
            return wc.DownloadString(url);
        }

        /// <summary>
        ///  向网页发送Post或者Get请求
        /// </summary>
        private static CookieContainer cookie = new CookieContainer();// 主要是设置session值
        public static string WebRequest(string url, bool isPost, IDictionary<string, string> parames)
        {
            HttpWebRequest webRequest = null;
            string param = string.Empty;
            foreach (var item in parames.Keys)
            {
                param += item + "=" + parames[item] + "&";
            }
            param.TrimEnd(‘&‘);
            if (!isPost)
                url += "?" + param;
            webRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;
            webRequest.Method = isPost ? "Post" : "Get";
            webRequest.KeepAlive = true;
            webRequest.CookieContainer = cookie;
            webRequest.Timeout = 1000 * 60;
            webRequest.ContentType = "application/x-www-form-urlencoded";
            if (isPost)
            {
                byte[] bs = Encoding.UTF8.GetBytes(param);
                webRequest.ContentLength = bs.Length;
                using (Stream requestWriter = webRequest.GetRequestStream())
                {
                    requestWriter.Write(bs, 0, bs.Length);
                }
            }
            WebResponse webResponse = webRequest.GetResponse();
            //string cookieheader = webRequest.CookieContainer.GetCookieHeader(new Uri(url));
            //cookie.SetCookies(new Uri(url), cookieheader);
            string responseData = string.Empty;
            using (StreamReader responseReader = new StreamReader(webResponse.GetResponseStream()))
            {
                responseData = responseReader.ReadToEnd();
            }
            return responseData;
        }
时间: 2024-10-22 23:08:31

C#帮助类的相关文章

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

iOS -- SKSpriteNode类

SKSpriteNode类 继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKSpriteNode.h 参考指南 Sprite Kit Progamming Guide 概览 重要提示:这是一个初步的API或者开发技术

iOS -- SKScene类

SKScene类 继承自 SKEffectNode:SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKScene.h 参考指南 Sprite Kit Progamming Guide 概览 重要提示:这是一个初步的API或者开

iOS -- SKPhysicsWorld类

SKPhysicsWorld类 继承自 NSObject 符合 NSCodingNSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKPhysicsWorld.h 参考指南 Sprite Kit Progamming Guide 概览 重要提示:这是一个初步的API或者开发技术文档.虽然已经审阅了本文档的技术准确性,但是它不是最终的版本.本机密信息仅适用于

C#嵌套类

嵌套类顾名思义就是类或者结构中定义的类 class Container { class Nested { Nested() { } } } <1>嵌套类的默认访问权限是private ,可以指定为public,protected,private,internal,protected internal.<2>嵌套类型可以访问外部类(包裹嵌套类的类),如果要访问外部类型,要把外部类通过构造函数传进一个实例<3>嵌套类中只能访问外部类中的静态成员,不能直接访问外部类的非静态成

一个实用的C#网页抓取类代码分享

一个实用的C# 网页抓取类 模拟蜘蛛,类中定义了超多的C#采集文章.网页抓取文章的基础技巧,下面分享代码: using System; using System.Data; using System.Configuration; using System.Net; using System.IO; using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; using Sys

类图(Rose) - Windows XP经典软件系列

最近开始了自己高级数据结构之旅,在这次旅行中,我将持续把一些高级的数据结构从理论到编码都过一遍,同时通过博客形式分享出来,希望大家指出不足之处! 二叉排序树是一种动态排序的数据结构,支持插入.删除.查找等操作,且平均时间复杂度为O(log(N)),但是普通二叉排序树不能保证树退化为一颗分支的情况,此时最坏情况下的时间复杂度为O(N).此时,平衡二叉树的产生了.平衡二叉树是一种动态调整平衡的数据结构,但理想的平衡二叉树很难,于是人们使用AVL.红黑树.Treap.伸展树等来替代平衡二叉树,这些数据

java 类对象使用

在学习反射机制时,总结一下获得类对象方式: 第一种方式:通过类本身来获得对象 Class<?> classname = this.getClass(); 或者this.class 第二种方式:通过子类的实例获取父类对象 ClassName cn = new ClassName(); UserClass = cn.getClass(); Class<?> SubUserClass = UserClass.getSuperclass(); 第三种方式:通过类名加.class获取对象 C

Python-class类的相关总结

在Python中,所有的数据类型都可以视为对象,自定义的对象数据类型就是面向对象中的类(class)的概念. 面向对象编程:object oriented programming简称OOP. 1 ###简单举例,以登记学生的姓名和成绩举例 2 #!/usr/bin/python 3 #-*- coding:utf-8 -*- 4 class Student(object): ##定义student类 5 def __init__(self, name, score): ##__init__可以绑

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中