c#扩展方法的使用,实现的几个功能
用扩展类写了一个管理类:
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Interop; namespace CommonClass
{
public static class ExtentionMethods
{
/// <summary>
/// dataRow 获取字段
/// </summary>
/// <param name="dr"></param>
/// <param name="fieldName"></param>
/// <returns></returns>
public static string GetField(this DataRow dr, string fieldName)
{
if (dr.Table.Columns.Contains(fieldName) && dr[fieldName] != null)
{
return dr[fieldName].ToString();
}
else
{
return "";
}
}
/// <summary>
/// Jtoken类型获取字符型字段
/// </summary>
/// <param name="token"></param>
/// <param name="fieldName"></param>
/// <returns></returns>
public static string GetStringField(this JToken token, string fieldName)
{
if (token[fieldName] == null)
{
return "";
}
else
{
return token[fieldName].ToString();
}
}
/// <summary>
/// dictionary添加键和值
/// </summary>
/// <typeparam name="T1"></typeparam>
/// <typeparam name="T2"></typeparam>
/// <param name="dict"></param>
/// <param name="key"></param>
/// <param name="value"></param>
public static void AddKeyValue<T1, T2>(this Dictionary<T1, T2> dict, T1 key, T2 value)
{
if (!dict.ContainsKey(key))
{
dict.Add(key, value);
}
}
/// <summary>
/// 窗体显示在usercontrol上面
/// </summary>
/// <param name="wnd"></param>
/// <param name="uc"></param>
public static void ShowInUserControl(this Window wnd, UserControl uc)
{
HwndSource winformWindow =
(System.Windows.Interop.HwndSource.FromDependencyObject(uc) as System.Windows.Interop.HwndSource);
if (winformWindow != null)
new WindowInteropHelper(wnd) { Owner = winformWindow.Handle };
wnd.Show();
}
/// <summary>
/// 将byte[] 反序列化成object对象
/// </summary>
/// <param name="binaryData">字节数组</param>
/// <returns>object对象</returns>
public static object ToEntity(this byte[] binaryData)
{
MemoryStream ms = new MemoryStream(binaryData);
ms.Seek(0, SeekOrigin.Begin);
IFormatter brFormatter = new BinaryFormatter(); Object obj = brFormatter.Deserialize(ms);
return obj;
}
/// <summary>
/// 将object 序列化成字节数组byte[]
/// </summary>
/// <param name="dsOriginal">object对象</param>
/// <returns>字节数组</returns>
public static byte[] ToByteArray(this object dsOriginal)
{
byte[] binaryDataResult = null;
MemoryStream memStream = new MemoryStream();
IFormatter brFormatter = new BinaryFormatter();
brFormatter.Serialize(memStream, dsOriginal);
binaryDataResult = memStream.ToArray();
memStream.Close();
memStream.Dispose();
return binaryDataResult;
} /// <summary>
/// 克隆-序列化的类
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static T Clone<T>(this T obj)
{
BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); bf.Serialize(ms, obj); ms.Seek(0, SeekOrigin.Begin); return (T)bf.Deserialize(ms);
} /// <summary>
/// 获取-窗口指针
/// </summary>
/// <param name="win"></param>
/// <returns></returns>
public static IntPtr ToHandle(this Window win)
{
WindowInteropHelper wndHelper = new WindowInteropHelper(win);
IntPtr wpfHwnd = wndHelper.Handle;
return wpfHwnd;
}
/// <summary>
/// 文本ip(0.0.0.0格式) 获取数字ip
/// </summary>
/// <param name="ipString"></param>
/// <returns></returns>
public static UInt32 ToIntIp(this string ipString)
{
UInt32 ip = (UInt32)(IPAddress.Parse(ipString).Address);
return ip;
} }
}
感谢每一位阅读此篇文章的人,希望可以帮到你。
c#扩展方法的使用,实现的几个功能的更多相关文章
- C#中的反射和扩展方法的运用
前段时间做了一个练手的小项目,采用的是三层架构,也就是Models,IDAL,DAL,BLL 和 Web , 在DAL层中各个类中有一个方法比较常用,那就是 RowToClass ,顾名思义,也就是将 ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇
最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...
- C#的扩展方法解析
在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继 ...
- 扩展方法(C#)
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 下面的示例为String添加 ...
- 扩展方法解决LinqToSql Contains超过2100行报错问题
1.扩展方法 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- C#扩展方法
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法就相当于一个马甲,给一个现有类套上,就可以为这个类添加其他方法了. 马甲必须定义为stati ...
- 枚举扩展方法获取枚举Description
枚举扩展方法 /// <summary> /// 扩展方法,获得枚举的Description /// </summary> /// <param name="v ...
- 扩展方法 1 简单的string扩展方法
这里是关于 String的简单扩展方法 (静态类 静态方法 this 类型 这里是string) static class Program { static void Main(string[] ar ...
随机推荐
- python查询完结篇
0x00 网上找一个查询网站,然后自己写的一个脚本 0x01 代码送上: import requests import time from bs4 import BeautifulSoup strat ...
- IntelliJ IDEA 17和Maven构建javaWeb项目
前言 电脑又断电了,眼看着写好的东西就没有了,这是第二次犯这个错误了.很难受呀!还是回到正题吧,我们来使用IDEA和Maven构建一个JavaWeb项目 软件环境: IDEA:2017.2.1 JDK ...
- POJ 3662 Telephone Lines【Dijkstra最短路+二分求解】
Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7214 Accepted: 2638 D ...
- [bzoj1301] [LLH邀请赛]参观路线
本题同bzoj1098 用个并查集,把连续的被访问过的点并起来..这样就不会尝试已经走过的点了. #include<cstdio> #include<iostream> #in ...
- QQ群友在线/离线,如何测试?
上篇文章『QQ好友在线/离线,如何测试?』针对即时通讯的"状态"进行了分析和总结,主要说到了QQ好友在线/离线实现方案,测试过程中需要注意的测试点. 针对好友状态实时性的要求需要使 ...
- SQL用了Union后的排序问题
最近使用SQL语句进行UNION查询,惊奇的发现:SQL没问题,UNION查询也没问题,都可以得到想要的结果,可是在对结果进行排序的时候,却出问题了. 1.UNION查询没问题 SELECT `id` ...
- 003_JS基础_面向对象基础
3.1 对象 引入:在js中表示一个人的信息(name, gender, age)通过var申明三个变量,但是这样使用基本数据类型的变量,他们是互相独立的,没有联系: 此时就需要使用对象,对象是 ...
- hasResultError
hasResultError 的作用是 让返回的对象可以报错误信息.
- Vue.js学习网址
Vue官网:http://cn.vuejs.org/v2/guide/index.html 淘宝镜像:http://npm.taobao.org/ Vue-router:https://router. ...
- C#如何释放已经加载的图片
使用Image.FromFile取磁盘上的图片时,这个方法会锁定图片文件,而且会导致内存占用增大, 有几种方法解决:一:将Image类转换成Bitmap类System.Drawing.Image im ...