10.6 扩展方法 - 图1无扩展方法:

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. double x = 3.14159;
  6. double y = Math.Round(x, 4);
  7. Console.WriteLine(y);
  8. }
  9. }

有扩展方法后:

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. double x = 3.14159;
  6. double y = x.Round(4);
  7. Console.WriteLine(y);
  8. }
  9. }
  10. static class DoubleExtension
  11. {
  12. public static double Round(this double input, int digits)
  13. {
  14. double result = Math.Round(input, digits);
  15. return result;
  16. }
  17. }

当我们无法修改类型源码时,可以通过扩展方法为目标数据类型追加方法。
LINQ 也是扩展方法的一大体现。

LINQ 实例

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. List<int> myList = new List<int>() { 11, 12, 13, 14, 15 };
  6. bool result = AllGreaterThanTen(myList);
  7. Console.WriteLine(result);
  8. }
  9. static bool AllGreaterThanTen(List<int> intList)
  10. {
  11. foreach (var item in intList)
  12. {
  13. if (item<=10)
  14. {
  15. return false;//提早return-
  16. }
  17. }
  18. return true;
  19. }
  20. }

使用Linq:(using System.Linq;)

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. List<int> myList = new List<int>() { 9, 12, 13, 14, 15 };
  6. //bool result = AllGreaterThanTen(myList);
  7. // 这里的 All 就是一个扩展方法
  8. bool result = myList.All(i => i > 10);
  9. Console.WriteLine(result);
  10. }
  11. static bool AllGreaterThanTen(List<int> intList)
  12. {
  13. foreach (var item in intList)
  14. {
  15. if (item<=10)
  16. {
  17. return false;//提早return-
  18. }
  19. }
  20. return true;
  21. }
  22. }