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解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
随机推荐
- 20145238-荆玉茗 《Java程序设计》第9周学习总结
20145238第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 ...
- 使用筛法在 O(logN) 的时间内查询多组数的素数因子
Prime Factorization using Sieve O(log n) for multiple queries 使用筛法在 O(logN) 的时间内查询多组数的素数因子 前言 通常, 我们 ...
- Git log、diff、config 进阶
前一段时间分享了一篇<更好的 git log>简要介绍怎么美化 git log 命令,其中提到了 alias命令,今天再继续谈谈 git相关, 看看如何通过配置自己的 git config ...
- Delphi 编写DLL动态链接库文件的知识
一.DLL动态链接库文件的知识简介: Windows的发展要求允许同时运行的几个程序共享一组函数的单一拷贝.动态链接库就是在这种情况下出现的.动态链接库不用重复编译或链接,一旦装入内存,Dlls函数可 ...
- centos7编译安装lamp实现wordpress
准备安装包,并解压 mariadb-10.3.13.tar.gz ,php-7.3.2.tar.bz2 ,httpd-2.4.38.tar.bz2 php-7.3.2 , phpMyAdmin ...
- datatable设置动态宽度,超过一定长度出现滚动条
获得宽度:var tableAutoWidth = $('.dataTable_wrapper').width();if (tableAutoWidth < 1200) { tableAutoW ...
- js将人民币数字转大写
function numberToUpper(money) { var cnNums = new Array("零", "壹", "贰", ...
- 转 Ubuntu 下 vim 搭建python 环境 配置
1. 安装完整的vim# apt-get install vim-gnome 2. 安装ctags,ctags用于支持taglist,必需!# apt-get install ctags 3. 安装t ...
- 统计寄存器AX中1 的个数
;==================================== ; 统计寄存器AX中1 的个数 DATAS segment DATAS ends CODES segment START: ...
- (转)为什么国外 MMORPG 中不采用自动寻路等功能?
不只是自动寻路,现在网游中的教学引导系统,辅助系统的功能强大程度,友好程度都可以说到了变态的程度,开发这些功能投入的资源甚至要超过游戏内容本身.究其原因,还是竞争越来越激烈,人心越来越浮躁,游戏商家为 ...