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 == -)
{
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
性能比较如下:

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#帮助类的更多相关文章
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
- .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
随机推荐
- (转载)arcgis for js - 解决加载天地图和WMTS服务,WMTS服务不显示的问题,以及wmts服务密钥。
1 arcgis加载天地图和wmts服务 arcgis for js加载天地图的例子网上有很多,这里先不写了,后期有空再贴代码,这里主要分析下WMTS服务为什么不显示,怎么解决. 条件:这里的WMTS ...
- poj 3485 区间选点
题目链接:http://poj.org/problem?id=3485 题意:X轴上公路从0到L,X轴上下有一些点给出坐标代表村庄,问在公路上最少建几个出口才能使每个村庄到出口的距离不超过D. 以村庄 ...
- 【转】在程序中设置android:gravity 和 android:layout_Gravity属性
在进行UI布局的时候,可能经常会用到 android:gravity 和 android:layout_Gravity 这两个属性. 关于这两个属性的区别,网上已经有很多人进行了说明,这边再简单说一 ...
- Spring boot 实现高吞吐量异步处理(适用于高并发场景)
技术要点 org.springframework.web.context.request.async.DeferredResult<T> 示例如下: 1. 新建Maven项目 asy ...
- 1060: [ZJOI2007]时态同步
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3610 Solved: 1521[Submit][Status][Discuss] Descript ...
- C#+Winform记事本程序
第17章 记事本 如何使用Visual C# 2010设计一个Windows应用程序——记事本,学习,可以进一步掌握MenuStrip(菜单).ToolStrip(工具栏).RichTextBox(高 ...
- 《JSON笔记之三》---postman中传入json串
1.关于如何使用postman工具,简单的介绍一下, 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等 ...
- js | javascript中获取dom元素的高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
- Logrotate实现Catalina.out日志每俩小时切割
一.Logrotate工具介绍 Logrotate是一个日志文件管理工具,它是Linux默认自带的一个日志切割工具.用来把旧文件轮转.压缩.删除,并且创建新的日志文件.我们可以根据日志文件的大小.天数 ...
- Go实现mqtt服务
package main import ( "os" "log" "github.com/eclipse/paho.mqtt.golang" ...