.NET 简单的扩展方法使用。
写代码时,我们经常会碰到dll中提供的方法,不够用或者不好用的情况。而且我们也不方便去更改dll本身的源码。
这时候我们可以使用.NET提供的“扩展方法”去解决这个问题。
下面我写几个简单的扩展方法在这里抛砖引玉,如有问题,请各位大大指正。
写代码时,我们经常会对string类型的数据进行操作,比如判断是否为null或者是否为空字符串。
平时我写代码基本就是如下代码:
string str = GetName(); //第一种
if (str == null || str == "")
{ } //第二种
if (string.IsNullOrEmpty(str))
{ }
这几种虽然也能判断字符串是否为空,但是用起来总是不太方便,我希望有一个“str.XXX()”的方法来直接判断是否为空。
这时候我就可以用“扩展方法”来实现我的想法。
因为我要为string类型加扩展方法,所以扩展方法类的名字必须是“原类名”+“Extensions”,并且是静态的。
所以这里我建立一个叫做“StringExtensions”的静态类。并写了一个IsNUllOrEmpty()的方法。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace WindowsFormsTest
{
public static class StringExtensions
{
/// <summary>
/// 判断字符串是否为null或""
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsNullOrEmpty(this string str)
{
return string.IsNullOrEmpty(str);
}
}
}
现在我就可以直接调用这个扩展方法去判断字符串是否为空了。代码如下:
string str = GetName(); //调用字符串扩展方法
if (str.IsNullOrEmpty())
{ }
类似的例子有很多,比如我想要将字符串转成int类型,平时我都是用“int.TryParse(str, out result);”进行转型。
有了扩展方法后,我就可以在扩展方法里面写一些复杂的操作,比如直接使用str.ToInt()就可以进行转型操作。
如下是转成string装成int的代码(也包含了刚才判断为空的方法):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace WindowsFormsTest
{
public static class StringExtensions
{
/// <summary>
/// 判断字符串是否为null或""
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsNullOrEmpty(this string str)
{
return string.IsNullOrEmpty(str);
} /// <summary>
/// 字符串转int
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static int ToInt(this string str)
{
int outInt = 0;
int.TryParse(str, out outInt);
return outInt;
}
}
}
我经验比较初级,平时能用到的扩展方法,也只是类似这些简单的操作。不知道是不是有悖发明者的初衷,还是希望各位大大指正。
.NET 简单的扩展方法使用。的更多相关文章
- 使用扩展方法简化RadAjaxManager设置
相对于RadAjaxPanel,RadAjaxManager提供了更精确控制更新目标的设置,特别是在某些场景下,使用RadAjaxManager能够获得更好的性能. 但是,由于要明确设置目标,配置的代 ...
- C#中扩展方法的使用
MSDN中这样定义扩展方法:扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. ...
- 扩展方法以及LinQ的学习
我们今天学习的内容其实还是蛮多的,学习了自动属性,扩展方法,复习初始化器,以及LinQ的一些方法,其实感觉有些还是很熟悉的,在前面的学习过程中有时间感觉学习的知识知道了怎么使用,但是还没有在项目中使用 ...
- C# DataTable扩展方法
在日常搬砖中,总结了一些简单的扩展方法. public static bool IsNullOrEmpty(this DataTable dt) { ; } public static bool Is ...
- 扩展方法 1 简单的string扩展方法
这里是关于 String的简单扩展方法 (静态类 静态方法 this 类型 这里是string) static class Program { static void Main(string[] ar ...
- c#扩展方法简单
扩展方法 怎样知道的. 这还得从项目的本身说起.该项目是一套的微软底层架构上搭建起来的. 全部的框架以及控件的封装,数据的传递方法都是总体的框架封装好的. 对经常使用的dropwodnlist控件的数 ...
- .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 ...
随机推荐
- 支持虚拟化也开来虚拟化就是装不上HyperV的解决方法
使用NTBOOTautofix修复BCD 今日换了台性能更强劲的电脑,本是想好好爽一下,结果却是满满的悲剧.先是硬盘里的游戏一个都打不开,8.1你要不要这么烂.好吧,不娱乐,那工作吧,结果hyper又 ...
- IS动态左侧菜单-01
<%@ Page Language="C#" CodeFile="Default3.aspx.cs" Inherits="Default3&qu ...
- offsetHeight在OnLoad中为0的现象
在使用IE中,特别在目前div+css的方式,往往不定义div的高度,这是在添加div内容后,需要获取div的高度时,往往需要用到offsetHeight. 在使用中,有时会碰到offsetHeigh ...
- .NET基础——方法
这一篇,我们来学习C#中的方法——函数 1. 方法的功能 方法的功能:用来复用代码的,当我们在一个程序中反复的写了同样的代码,我们就可以把需要重复写的代码定义在一个方法中,用到的时候只需要调用就可 ...
- c#-委托,匿名方法,lambda表达的关系
什么是委托: 包含单个方法的委托和函数指针是相似的,不同的是,委托是面向帝乡的并且是类型安全的 声明委托类型: delegate void mydel(int x); 声明委托和声明方法差不多,两个不 ...
- 浅谈href=#与href=javascript:void(0)的区别
#"包含了一个位置信息 默认的锚点是#top 也就是网页的上端 而javascript:void(0) 仅仅表示一个死链接 这就是为什么有的时候页面很长浏览链接明明是#可是跳动到了页首 而 ...
- JS 处理十六进制颜色渐变算法-输入颜色,输出渐变rgb数组
html颜色有几种表示方式: 英文单词颜色值:background-color:Blue:十六进制颜色值:background-color:#FFFFFF: RGB颜色值三元数字:backgroun ...
- 2017 01 16 校内小测 ZXR专场
我等蒟蒻爆零之后,问LincHpin大爷:“此等神题可有甚么来头?” LincHpin:“此三题皆为当年ZXR前辈所留.” 固名之,ZXR专场,233~~~ T1 勤奋的YouSiki 这个题在BZO ...
- Form 提交表单
---HTML <form action="/Sample/SampleList/ExportSample" style="display:inline" ...
- 【01背包】HDU 2546 饭卡
Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) ...