C# 扩展方法的使用

C#3.0引入了扩展方法的概念,乍一听起来不是很好理解,我们举一个简单的例子:
有一个业务场景,需要频繁地判断一个字符串内是否包含阿拉伯数字,字符串的Contains方法是没有办法实现的,那么可以考虑写一个公共方法,封装一个方法随时来判断,类似下面这样的:

    public static class StringExtension
    {
        public static bool ContainsNumber(string str)
        {
            return Regex.IsMatch(str, @"\d+");
        }
    }

调用的时候就要这样:

        static void Main(string[] args)
        {
            string str = "我是包含的阿拉伯数字1的";
            bool isContainsNumber = StringExtension.ContainsNumber(str);
        }

但是这样写比较麻烦,每次都要通过类名加方法名来进行调用,这个时候扩展方法就派上用场了,可以使用下面的代码实现:

    public static class StringExtension
    {
        public static bool ContainsNumber(this string str)
        {
            return Regex.IsMatch(str, @"\d+");
        }
    }

这段代码在方法的传入参数前多了一个this,这样编译器会把该方法作为string的扩展方法,就可以直接使用字符串的实例直接调用了,想下面这样:

        static void Main(string[] args)
        {
            string str = "我是包含的阿拉伯数字1的";
            bool isContainsNumber = str.ContainsNumber();
        }

这样是不是方便很多了呢?
在C#的Framework里面也使用了大量的扩展方法,比如Any方法,也可以实现和上面相同的功能:

        static void Main(string[] args)
        {
            string str = "我是包含的阿拉伯数字1的";
            bool isContainsNumber = str.Any<char>(t => t > 48 && t < 57);
        }

总的来说,当我们在使用Framework或者第三方的类库的时候,发现对某个类的相同操作很频繁,就可以考虑为该类型添加扩展方法,方便使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值