【问题标题】:Why doesn't "object[]" work?为什么“对象[]”不起作用?
【发布时间】:2018-01-31 23:04:10
【问题描述】:

我认为对象意味着所有数据类型,但由于某种原因它不起作用。

我做了一个ToStringArray 方法,它将任何类型的数组转换为字符串数组string[],我是这样写的,它可以转换任何类型:

public static string[] ToStringArray(this object[] buffer)
{
//code here.
}

但问题是,如果我有一个像这样的数组:

byte[] x = new byte[] { 1, 2, 3, 4, 5 };

然后尝试做:

string[] s = x.ToStringArray();

我收到一条错误消息,上面写着byte[] does not contain the definition ToStringArray

我该如何解决这个问题或我做错了什么?

【问题讨论】:

标签: c# arrays object


【解决方案1】:

它们之间没有隐式转换,数组方差技巧只适用于引用类型的数组; byte[] 不符合此条件。

您可能想改用泛型:

public static string[] ToStringArray<T>(this T[] buffer)
{
//code here.
}

【讨论】:

  • @CodingYoshi 一个引用类型的数组可以被视为另一种引用类型的数组,如果它们之间存在可用的引用保留转换;最常见的是,这意味着object[] 可以通过演员转换与任何SomeClass[] 互换。这是不寻常的,因为这不是一个可靠的转换——你不能仅仅因为你认为它是一个object[] 而将DbConnection 转换为SomeClass[]。对于 genericsin / out 变体形式化了 safe 规则。
猜你喜欢
  • 2019-01-27
  • 2013-11-02
  • 2013-03-16
  • 2011-10-04
  • 2021-04-30
  • 1970-01-01
  • 2012-03-02
  • 2016-09-04
  • 1970-01-01
相关资源
最近更新 更多