【问题标题】:C# Cannot implicitly convert type 'T' to 'object[*,*]'C# 无法将类型“T”隐式转换为“object[*,*]”
【发布时间】:2014-12-12 21:17:53
【问题描述】:

我有一个方法正在尝试更新以接受多种类型的数据,因此我使用了泛型。我让它与几种不同的类型一起工作,但传入的一种类型是object[,]。当我尝试将数据设置为该类型时,我在转换时收到以下错误:

Cannot implicitly convert type 'T' to 'object[*,*]'

代码很简单:

object[,] data = (T)(object[,])element;

有什么想法吗?

【问题讨论】:

  • 不是一个好习惯,但这将使它编译object[,] data = (object[,])(object)element;
  • 如果您使用泛型,为什么在泛型方法中硬编码类型?我觉得有一个更大的问题。
  • 什么是T?如果您遵循通常的命名约定,它可能是泛型类/结构或泛型方法的类型参数。但是没有从T 到任何数组类型的转换。 element 的类型是什么? T?
  • 请提供足够的代码以便我们重现您的问题:例如什么是elementT等。
  • 你需要更好地解释代码的intent是什么。您能否向我们展示更多代码,或许还有一个可行的示例。

标签: c# generics type-conversion implicit-conversion


【解决方案1】:

您看到的问题是,由于T 既不是派生自object[,] 也不是实现explicit conversion,因此代码实际上不知道如何执行转换。这是因为在底层,转换是 box 或 unbox 派生类型,或者调用转换方法以返回所需的输出类型。

由于您使用的是泛型,您可以使用where 语句来限制类型。只要受限类型(或更多派生类型)定义并显式转换为(或派生自)object[,],您就可以执行转换。

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多