C# 扩展方法集

语法注意点

  • 可以使用扩展方法来扩展类或接口。
  • 不能重写扩展方法。
  • 扩展方法只能在非嵌套、非泛型静态类内部定义。
  • 扩展方法必须定义在静态类中。
  • 扩展方法的第一个参数的类型用于指定被扩展的类型,它限制该扩展方法只能作用于该类型。
  • 扩展方法的第一个参数必须带有 "this" 修饰符。
  • 调用方必须引入扩展方法的命名空间。
  • 调用扩展方法的语法,与调用 "被扩展的类型上的实例方法" 的语法相同。
  • 调用扩展方法时,无需传递第一个参数,因为该参数仅用于指定被扩展的类型。
  • 扩展方法是一种特殊的静态方法,其调用方式与调用被扩展类型上的实例方法语法相同。
  • 仅当使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。

 

Humanizer(人性化)

Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities

 

string

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Return a string describing the value as a file size.
// For example, 1.23 MB.
public static string ToFileSize(this double value)
{
    string[] suffixes = { "bytes", "KB", "MB", "GB",
        "TB", "PB", "EB", "ZB", "YB"};
    for (int i = 0; i < suffixes.Length; i++)
    {
        if (value <= (Math.Pow(1024, i + 1)))
        {
            return ThreeNonZeroDigits(value /
                Math.Pow(1024, i)) +
                " " + suffixes[i];
        }
    }
 
    return ThreeNonZeroDigits(value /
        Math.Pow(1024, suffixes.Length - 1)) +
        " " + suffixes[suffixes.Length - 1];
}
1
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Return the value formatted to include at most three
// non-zero digits and at most two digits after the
// decimal point. Examples:
//         1
//       123
//        12.3
//         1.23
//         0.12
private static string ThreeNonZeroDigits(double value)
{
    if (value >= 100)
    {
        // No digits after the decimal.
        return value.ToString("0,0");
    }
    else if (value >= 10)
    {
        // One digit after the decimal.
        return value.ToString("0.0");
    }
    else
    {
        // Two digits after the decimal.
        return value.ToString("0.00");
    }
}

 

参考资料

扩展方法 (C# 编程指南) (Entrance on MSDN)
http://msdn.microsoft.com/zh-CN/library/bb383977
http://msdn.microsoft.com/zh-cn/magazine/cc163317.aspx

c# 扩展方法奇思妙用
http://www.cnblogs.com/ldp615/archive/2009/08/07/1541404.html

Conversion rules for Instance parameters and their impact
http://blogs.msdn.com/b/sreekarc/archive/2007/10/11/consequences-of-conversion-rules-for-instance-parameters.aspx

Extension methods Interoperability between languages
http://blogs.msdn.com/b/sreekarc/archive/2007/10/11/extension-methods-interoperability-between-languages.aspx

开源扩展项目
http://dnpextensions.codeplex.com/

posted @   霍旭东  阅读(708)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示