c# - 使用 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());
会给你一个新的字符串数组。
谢谢。
解决方案
什么ConvertAll()
是改变引用的类型。因此,您有一个 StringBuilder 引用,并将该引用复制到 type 的变量object
:
var builder = new StringBuilder();
builder.AppendLine("Hello, World!");
object converted = (object)builder;
现在converted
拥有一个object
引用,但它指向的实际对象仍然是StringBuilder
您实例化的对象。
您创建的委托中也发生了同样的情况。您不能只是将某些内容强制转换为基类并“切断”所有不在基类中的部分。
如果您认为需要此方案,请创建自定义转换。
推荐阅读
- javascript - JS Doc,有没有办法指定“Choice”参数?
- python - 满足条件时如何在字符之间添加空格?
- javascript - 缺少资源的全局 JavaScript 事件
- python - Pytorch 张量操作给了我不同的输出
- android - 远程配置替代方案:存储 UI 特定参数
- azure-data-factory - 尝试从 Azure 数据工厂中针对每个活动命中 API 时出现 429 错误
- python - 如果单击图像中框的周边,则绘制一个框
- php - index.php 没有获取 GET 变量,但 index.php?name=Joe 是(ESP8266)
- laravel - .isDirty 在提交并重新加载 InertiaJS 页面后为 true
- python - 如何在 python 脚本中运行 cookiecutter 命令时跳过“可以删除并重新下载吗?[是]:”问题?