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解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
随机推荐
- Java解析html页面,获取想要的元素
背景:通过接口访问数据,获取的内容是个标准的html格式,使用jsoup的方式获取页面元素值 先推荐比较好的博客:http://www.open-open.com/jsoup/. 单个案例比较不错 h ...
- Jmeter启动错误
错误一 1 apache-jmeter-2.13\bin>jmeter 'findstr' 不是内部或外部命令,也不是可运行的程序 或批处理文件. Not able to find Java e ...
- Spring boot 异常处理配置
1. 新建Maven项目 exception 2. pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...
- R语言网络爬虫学习 基于rvest包
R语言网络爬虫学习 基于rvest包 龙君蛋君:2015年3月26日 1.背景介绍: 前几天看到有人写了一篇用R爬虫的文章,感兴趣,于是自己学习了.好吧,其实我和那篇文章R语言爬虫初尝试-基于RVES ...
- IE 8 下小心使用console.log()
我们很多情况下会使用console.log() 对代码调试.在chrome下和Firefox下都不会有太大问题,但是在最近我在IE8 下调试时使用了console.log(),就出现一些问题.在IE8 ...
- java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量
package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...
- iOS 远程通知(Remote Notification)和本地通知(Local Notification)
ios通知分为远程通知和本地通知,远程通知需要连接网络,本地通知是不需要的,不管用户是打开应用还是关闭应用,我们的通知都会发出,并被客户端收到 我们使用远程通知主要是随时更新最新的数据给用户,使用本地 ...
- 微信公众号支付java版本
回调函数 @RequestMapping("/toPay") public String toPay(HttpServletRequest request, HttpServlet ...
- select值改变
改变select的值,然后执行一个方法.可以用chang: $("#select").change(function(){ //要执行的内容 });
- spring-mvc.xml的定时器配置
<!-- 设置时间 --> <bean id="myJobTrigger" class="org.springframework.scheduling. ...