使用ConvertAll转换为对象数组

时间:2018-12-17 16:09:18

标签: c#

我误解了ConvertAll的功能是什么还是只是不了解某些东西,因为我认为它是更改类型而不仅仅是转换。

因此,我想知道如何将StringBuilder(或任何类)转换为另一个基类(或本例中的对象),并且仍然保留其数据和类型。

StringBuilder[] y = new StringBuilder[] { new StringBuilder("a"), new StringBuilder("b"), new StringBuilder("c") };
object[] objectArray1 = Array.ConvertAll<StringBuilder, object>(y, (x2) => (object)x2);

在上面,新数组是对象的,但仍包含StringBuilder项。我认为新数组将是新类型的,因此本质上会丢失所有原始数据,例如通过转换从int转换为字符串将为您提供全新的字符串数组。

string[] array2 = Array.ConvertAll(array1,
        element => element.ToString());

将为您提供新的字符串数组。

谢谢。

1 个答案:

答案 0 :(得分:1)

ConvertAll()的作用是更改引用的类型。因此,您有一个StringBuilder引用,并将该引用复制到类型为object的变量中:

var builder = new StringBuilder();
builder.AppendLine("Hello, World!");

object converted = (object)builder;

现在converted拥有一个object引用,但是它指向的实际对象仍然是您实例化的StringBuilder

您创建的委托中也发生了同样的情况。您不能只是将某些内容强制转换为基类并“切断”所有不在基类中的部分。

如果您认为自己有需要,请创建一个自定义转换。