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解析域名
#coding:utf-8 import socket def URL2IP(): for oneurl in urllist.readlines(): url=str(oneurl.strip()) ...
- 线性表的链式存储结构的实现及其应用(C/C++实现)
存档----------- #include <iostream.h> typedef char ElemType; #include "LinkList.h" voi ...
- Parade(单调队列优化dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others) ...
- 修改mysql密码的四种方法
方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...
- [国嵌笔记][010][TFTP与NFS服务器配置]
交叉开发 嵌入式软件产生的平台称为宿主机,运行嵌入式软件的平台称为目标机 宿主机一般通过串口.网络.USB.JTAG等方式将软件下载到目标机 网络下载 一般有TFTP和NFS两种方式 tftp服务器 ...
- UE4 径向模糊radiu blur
hlsl代码为: float2 ScreenMult = ; ; ] = {-0.08,-0.05,-0.03,-0.02,-0.01,0.01,0.02,0.03,0.05,0.08}; float ...
- C#采用rabbitMQ搭建分布式日志系统
网上对于java有很多开源的组件可以搭建分布式日志系统,我参考一些组件自己开发一套简单的分布式日志系 全部使用采用.NET进行开发,所用技术:MVC.EF.RabbitMq.MySql.Autofac ...
- cnzz友盟怎么安装网站统计代码监控网站流量
做网站的都知道cnzz统计,它是用来统计网站流量的,可以分析网站数据,进行更好的对网站优化,下面我教大家怎么添加统计代码 工具/原料 cnzz 方法/步骤 打开百度搜索"cnzz友盟&quo ...
- phpstorm 怎么实现分屏展示
- intellij idea on update action\on frame deactivation ||Servlet 页面不同步问题
当修改servlet源码时,对应的servlet页面即使刷新也不会改变,,,很烦躁 因为xx.java需要编译成xx.class后,再部署到服务器上才可以运行,所以问题就是服务器里的类文件并没有更新. ...