obsidian/笔记文件/2.笔记/Array.ConvertAll.md

102 lines
3.0 KiB
Markdown
Raw Permalink Normal View History

2025-03-26 00:02:56 +08:00
#unity/日常积累
`Array.ConvertAll` 是 .NET 中的一个方法,用于将一个数组中的每个元素转换为另一个类型的数组。它属于 `Array` 类的一部分,允许你使用转换函数将原始数组中的每个元素映射到一个新数组中。这个方法非常有用,尤其是当你需要将一个类型的数组转换为另一个类型的数组时。
### 方法签名:
``` cs
public static U[] ConvertAll<T, U>(T[] array, Converter<T, U> converter);
```
- **T[] array**:原始数组,包含要转换的元素。
- **Converter<T, U> converter**:转换方法,定义如何将每个元素从类型 `T` 转换为类型 `U`
- **返回值**:返回一个新的类型为 `U[]` 的数组,包含转换后的元素。
### 使用示例:
假设我们有一个整数数组,我们想将它转换为字符串数组:
``` cs
using System;
class Program
{
static void Main()
{
// 原始数组
int[] numbers = { 1, 2, 3, 4, 5 };
// 使用 Array.ConvertAll 转换为字符串数组
string[] stringNumbers = Array.ConvertAll(numbers, num => num.ToString());
// 打印结果
foreach (var str in stringNumbers)
{
Console.WriteLine(str);
}
}
}
```
**输出**
``` cs
1
2
3
4
5
```
在这个例子中,我们将 `int[] numbers` 数组中的每个整数转换成了字符串,最终得到了一个字符串数组 `string[] stringNumbers`
### 更复杂的转换:
你可以使用 `Array.ConvertAll` 进行更复杂的转换,例如将一个对象数组转换为另一个对象类型的数组,或执行更复杂的操作。
例如,将一个表示人的姓名的数组转换为包含问候语的字符串数组:
``` cs
using System;
class Program
{
static void Main()
{
// 姓名数组
string[] names = { "Alice", "Bob", "Charlie" };
// 使用 Array.ConvertAll 添加问候语
string[] greetings = Array.ConvertAll(names, name => "Hello, " + name + "!");
// 打印问候语
foreach (var greeting in greetings)
{
Console.WriteLine(greeting);
}
}
}
```
**输出**
``` cs
Hello, Alice!
Hello, Bob!
Hello, Charlie!
```
### 工作原理:
`Array.ConvertAll` 是通过调用提供的 `Converter<T, U>` 委托(通常是一个 Lambda 表达式或方法引用)来处理原始数组中的每个元素。这使得 `Array.ConvertAll` 非常灵活和强大,能够快速实现批量转换。
### 其他注意事项:
- `Array.ConvertAll` 不会改变原始数组,它会返回一个新的数组。
- 由于 `Array.ConvertAll` 是一个静态方法,你不需要实例化 `Array` 类就可以调用它。
### 总结:
- `Array.ConvertAll` 用于将一个数组的元素转换为另一种类型的数组。
- 它接收一个数组和一个转换函数作为参数,并返回一个新的数组。
- 这个方法在处理大量数据时非常有用,特别是在需要批量转换或处理数据时。