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 == -)
{
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;
}
}

另一个序列化方式为Json.NET

详见:http://json.codeplex.com/

性能比较如下:

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 bool MyWebRequest(string url, bool isPost, IDictionary<string, string> parames, out string serverMsg)
{
try
{
string param = string.Empty;
if (parames != null)
{
foreach (var item in parames.Keys)
{
param += item + "=" + parames[item] + "&";
}
}
param.TrimEnd('&');
if (!isPost)
{
url += "?" + param;
}
HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
webRequest.Method = isPost ? "Post" : "Get";
webRequest.KeepAlive = true;
webRequest.CookieContainer = cookie;
webRequest.Timeout = * ;
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, , bs.Length);
}
}
using (WebResponse webResponse = webRequest.GetResponse())
{
//string cookieheader = webRequest.CookieContainer.GetCookieHeader(new Uri(url));
//cookie.SetCookies(new Uri(url), cookieheader);
using (StreamReader responseReader = new StreamReader(webResponse.GetResponseStream()))
{
serverMsg = responseReader.ReadToEnd();
return true;
}
}
}
catch (Exception ex)
{
serverMsg = ex.Message;
return false;
}
} //对应的服务端处理
public class Main : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
HttpRequest hr = context.Request;
//没必要区分是post还是get方式了,直接可以获取相对应的值了
string name = hr["name"];
//get方式获取值
string getName = hr.QueryString["name"];
//post方式获取值
string postName = hr.Form["name"]; context.Response.ContentType = "text/plain";
context.Response.Write("姓名:" + name + " = " + getName + " = " + postName);
} public bool IsReusable
{
get
{
return false;
}
}
}
        /// <summary>
/// json数据的Post请求
/// </summary>
/// <param name="url">请求的地址</param>
/// <param name="data">请求的jason参数</param>
/// <param name="msg">服务器返回的消息或者异常信息</param>
/// <returns>是否执行成功</returns>
public static bool JsonPost(string url, string data, out string msg)
{
try
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.UTF8))
{
writer.Write(data);
}
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
msg = reader.ReadToEnd();
return true;
}
}
}
}
catch (Exception exception)
{
msg = exception.Message;
return false;
}
} //对应的服务端处理
public class Main : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
HttpRequest hr = context.Request;
string result = string.Empty;
using (Stream stream = hr.InputStream)
{
using (StreamReader sr = new StreamReader(stream))
{
result = sr.ReadToEnd();
}
}
//此处对result进行json反序列化即可
context.Response.ContentType = "text/plain";
context.Response.Write("客户端发送的整体内容:" + result);
} public bool IsReusable
{
get
{
return false;
}
}
}
        /// <summary>
/// 上传文件到服务器
/// </summary>
/// <param name="url">请求的服务器地址</param>
/// <param name="uploadFile">要上传的文件本地路径</param>
/// <param name="msg">服务器返回的消息或者异常信息</param>
/// <returns>是否执行成功</returns>
public static bool UploadFile(string url, string uploadFile, out string msg)
{
msg = string.Empty;
try
{
using (HttpClient client = new HttpClient())
{
client.Timeout = new TimeSpan(, , );
using (FileStream stream = File.OpenRead(uploadFile))
{
StreamContent content2 = new StreamContent(stream);
using (MultipartFormDataContent content = new MultipartFormDataContent())
{
content.Add(content2, "file", Path.GetFileName(uploadFile));
HttpResponseMessage result = client.PostAsync(url, content).Result;
msg = result.Content.ReadAsStringAsync().Result;
if (result.StatusCode.ToString() == "OK")
{
return true;
}
}
}
}
}
catch (Exception ex)
{
msg = ex.Message;
}
return false;
} //对应的服务端处理
public class Main : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
HttpRequest hr = context.Request; HttpFileCollection hfc = hr.Files;
IList<HttpPostedFile> list = hfc.GetMultiple("file");
for (int i = ; i < list.Count; i++)
{
HttpPostedFile ff = list[i];
       //或者直接这样保存:ff.SaveAs("F:\\" + ff.FileName);
using (Stream stream = ff.InputStream)
{
using (FileStream fs = File.OpenWrite("C:\\infoOver.txt"))
{
byte[] b = new byte[ * * ];
int readlength = ;
while ((readlength = stream.Read(b, , b.Length)) > )
{
fs.Write(b, , readlength);
}
}
}
}
context.Response.ContentType = "text/plain";
context.Response.Write("文件保存成功");
} public bool IsReusable
{
get
{
return false;
}
}
}

C#帮助类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

  10. .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

    去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...

随机推荐

  1. OpenCV2马拉松第5圈——线性滤波

    收入囊中 这里的非常多内容事实上在我的Computer Vision: Algorithms and ApplicationsのImage processing中都有讲过 相关和卷积工作原理 边界处理 ...

  2. 判断团队适不适合使用node

    1.要不要用 2.历史包袱 3.跟进升级 看完scott创业公司使用node,对于一个团队要不要使用node,第一个就是如果承接的项目有很多历史迭代,线上也在稳定的抛,不要轻易的替换,比如很多老代码, ...

  3. Oracle数据库几种启动方式及查询当前状态

    Oracle数据库几种启动方式 1.startup nomount: 非安装启动,这种方式下启动可执行:重建控制文件.重建数据库,读取init.ora文件,启动instance,即启动SGA和后台进程 ...

  4. 在matlab中查看变量的数据类型

    >> x = x = >> class(x) ans = double

  5. MongoDB数据库CXX Driver编译

    最近项目需要,想要测试下MongoDB读写大量小图片的速度(单纯文件系统io效率比较低,想试试NoSQL能不能提速), 因为使用C++开发,所以使用MongoDB的CXX驱动,需要自己编译,下面记录整 ...

  6. 前端jQuery之文档操作

    1.文档操作内部插入 A.append(B) 吧B添加到A的后面 A.appendTo(B) 吧A添加到B的后面 A.prepend(B) 吧B添加到A的前面 A.prependTo(B) 吧A添加到 ...

  7. 前端css之文本操作及块级元素和行内元素

    1.文本操作 1.1文本颜色(color) 颜色指定方式: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB(255,0,0) 颜色的名称 - 如:  red 1.2水平对齐方式 ...

  8. Friendly Date Ranges-freecodecamp算法题目

    Friendly Date Ranges 1.要求 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 ...

  9. spring-mybatis整合异常2

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' ...

  10. [异常笔记] spring cloud 服务消费者启动-2018040501

    一.异常信息: Error starting ApplicationContext. To display the auto-configuration report re-run your appl ...