首页 > 解决方案 > 使用 ConvertAll 转换为对象数组

问题描述

我是否误解了 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());

会给你一个新的字符串数组。

谢谢。

标签: c#

解决方案


什么ConvertAll()是改变引用的类型。因此,您有一个 StringBuilder 引用,并将该引用复制到 type 的变量object

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

object converted = (object)builder;

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

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

如果您认为需要此方案,请创建自定义转换。


推荐阅读