C#高级编程:泛型方法示例——累加集合元素

需积分: 14 44 下载量 122 浏览量 更新于2024-08-05 收藏 97.07MB PDF 举报
泛型方法是C#编程中一种强大的特性,它允许我们在方法声明中定义类型参数,使得方法能够处理多种数据类型,提高了代码的灵活性和可重用性。在C#中,泛型方法不同于泛型类,它可以在非泛型类中定义,其语法结构与非泛型方法类似,但带有类型参数。 在5.6节中,我们学习了如何定义泛型方法。例如,`swap<T>(ref T x, ref T y)` 方法,这里的 `<T>` 是类型参数,代表任何可以进行引用传递的数据类型。`ref` 关键字用于表示参数是传引用,而不是值,这对于涉及大量数据交换的操作非常重要,如交换两个整数 `i` 和 `j` 的值时,无需显式指定类型: ```csharp void swap(ref int i, ref int j) { T temp = i; i = j; j = temp; } ``` 调用泛型方法时,编译器会自动推断参数类型,所以我们通常不需要显式指定类型,如下所示: ```csharp int i = 4; int j = 5; swap(ref i, ref j); ``` 在实际应用中,泛型方法可以极大地方便我们编写通用代码。例如,5.6.1节提供了一个示例,展示了如何使用泛型方法累加集合(如 `List<T>` 或 `ArrayList`)中的所有元素。在这个例子中,我们定义了一个 `Sum` 方法,它可以接收任何实现了 `IComparable<T>` 接口的类型作为参数,然后计算这些元素的总和: ```csharp public static decimal Sum<T>(IEnumerable<T> items) where T : IComparable<T> { decimal sum = 0; foreach (T item in items) { sum += item; } return sum; } // 示例:计算Account对象的Balance属性之和 var accountList = new List<Account>(); decimal totalBalance = Sum(accountList.Select(a => a.Balance)); ``` 泛型方法的使用大大简化了代码,减少了冗余,并提高了代码的可维护性和扩展性。需要注意的是,使用泛型时要确保类型安全,避免出现类型不匹配的运行时错误。此外,C#中的 `<T>` 符号不仅仅限于方法,还可以用于类、接口、委托等,这是C#泛型的另一个重要方面。