我误解了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());
将为您提供新的字符串数组。
谢谢。
答案 0 :(得分:1)
ConvertAll()
的作用是更改引用的类型。因此,您有一个StringBuilder引用,并将该引用复制到类型为object
的变量中:
var builder = new StringBuilder();
builder.AppendLine("Hello, World!");
object converted = (object)builder;
现在converted
拥有一个object
引用,但是它指向的实际对象仍然是您实例化的StringBuilder
。
您创建的委托中也发生了同样的情况。您不能只是将某些内容强制转换为基类并“切断”所有不在基类中的部分。
如果您认为自己有需要,请创建一个自定义转换。