为什么不能将一个泛型类型的实例转换为另一个实例?

弗拉基米尔·萨切克(Vladimir Sachek)

我如何实现一个结构,以便可以执行以下转换?

var a = new StatusedValue<double>(1, false);
var b = (StatusedValue<int>)a;

我的实现应类似于Nullable<T>,其工作方式正常。但是,此代码失败并显示System.InvalidCastException

public struct StatusedValue<T>  where T : struct
{
    public StatusedValue(T value) : this(value, true)
    {

    }

    public StatusedValue(T value, bool isValid)
    {
        this.value = value;
        this.isValid = isValid;
    }

    private T value;
    private bool isValid;

    public static implicit operator StatusedValue<T>(T value)
    {
        return new StatusedValue<T>(value);
    }

    public static explicit operator T(StatusedValue<T> value)
    {
        return value.value;
    }
}

结果:

无法将类型为“ StatusedValue`1 [System.Double]”的对象强制转换为类型为“ StatusedValue`1 [System.Int32]”的对象。

dcastro

这对Nullable<T>类型有效,因为它们会从编译器中得到特殊处理。这称为“提升转换运算符”,您无法定义自己的运算符。

C#规范的6.4.2节开始

6.4.2提升转换运算符

给定一个用户定义的转换运算符,该运算符从非空值类型S转换为非空值类型T,存在一个从S?转换的提升转换运算符。到T?。此提升的转换运算符从S?解开吗?到S,然后是用户定义的从S到T的转换,然后是从T到T?的换行,只是空值S?直接转换为零值T?。提升的转换运算符与其基础的用户定义转换运算符具有相同的隐式或显式分类。术语“用户定义的转换”适用于用户定义的转换操作和提升转换操作符的使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么不能将从另一个泛型类扩展的类作为泛型类传递?

来自分类Dev

为什么我不能将一列从一个枚举转换为另一个?

来自分类Dev

为什么不能将超类引用也转换为扩展了另一个超类的子类?

来自分类Dev

将一个类实例转换为另一个类的实例

来自分类Dev

为什么不能将枚举作为另一个枚举的基础类型?

来自分类Dev

Python 实例变量包含另一个类的实例,但为什么我不能访问该变量的实例变量

来自分类Java

如何实例化一个泛型类型?

来自分类Dev

为什么将通用返回类型强制转换为另一个通用类型?

来自分类Dev

为什么不能将值从一个XYSeriesCollection复制到另一个?

来自分类Dev

为什么在调用另一个函数时不能将一个函数定义为参数?

来自分类Dev

为什么不能将一个阵列复制到另一个阵列?

来自分类Dev

为什么修改一个实例的值会更改另一个实例的值?

来自分类Dev

为什么不能将单例方法附加到另一个对象?

来自分类Java

为什么一个类的实例可以访问其自身类型的另一个实例的私有字段?

来自分类Dev

为什么不能将一个类隐式转换为其通用基类?

来自分类Dev

Python:为什么我不能将一个字符串从一个 df 复制到另一个?

来自分类Dev

通过TypeScript中的另一个泛型类型保留泛型类型

来自分类Dev

为什么不能将使用 2 个 CTE 的查询链接到另一个表

来自分类Dev

为什么有两个“Okular”实例,我如何摆脱另一个实例?

来自分类Dev

为什么 NSManagedObject 实例不应该从一个线程传递到另一个线程?

来自分类Dev

在python中,一个实例A可以在你让B=A之后被另一个B修改?为什么?

来自分类Java

为什么可以在类级别上定义一个Property实例,但不能将属性加载到其中?

来自分类Dev

测试一个对象是否是另一个实例类型的子类

来自分类Dev

为什么我不能将系列类型设置为与Python Pandas等同于另一个系列类型

来自分类Dev

为什么容器不能请求另一个?

来自分类Dev

为什么不能在Enterprise Architect中将对象(类的实例)连接到另一个对象(类的实例)的特定属性?

来自分类Dev

用另一个泛型扩展泛型类型

来自分类Dev

如何为另一个泛型类使用泛型参数类型?

来自分类Dev

依赖于Rust中另一个泛型的泛型类型

Related 相关文章

  1. 1

    为什么不能将从另一个泛型类扩展的类作为泛型类传递?

  2. 2

    为什么我不能将一列从一个枚举转换为另一个?

  3. 3

    为什么不能将超类引用也转换为扩展了另一个超类的子类?

  4. 4

    将一个类实例转换为另一个类的实例

  5. 5

    为什么不能将枚举作为另一个枚举的基础类型?

  6. 6

    Python 实例变量包含另一个类的实例,但为什么我不能访问该变量的实例变量

  7. 7

    如何实例化一个泛型类型?

  8. 8

    为什么将通用返回类型强制转换为另一个通用类型?

  9. 9

    为什么不能将值从一个XYSeriesCollection复制到另一个?

  10. 10

    为什么在调用另一个函数时不能将一个函数定义为参数?

  11. 11

    为什么不能将一个阵列复制到另一个阵列?

  12. 12

    为什么修改一个实例的值会更改另一个实例的值?

  13. 13

    为什么不能将单例方法附加到另一个对象?

  14. 14

    为什么一个类的实例可以访问其自身类型的另一个实例的私有字段?

  15. 15

    为什么不能将一个类隐式转换为其通用基类?

  16. 16

    Python:为什么我不能将一个字符串从一个 df 复制到另一个?

  17. 17

    通过TypeScript中的另一个泛型类型保留泛型类型

  18. 18

    为什么不能将使用 2 个 CTE 的查询链接到另一个表

  19. 19

    为什么有两个“Okular”实例,我如何摆脱另一个实例?

  20. 20

    为什么 NSManagedObject 实例不应该从一个线程传递到另一个线程?

  21. 21

    在python中,一个实例A可以在你让B=A之后被另一个B修改?为什么?

  22. 22

    为什么可以在类级别上定义一个Property实例,但不能将属性加载到其中?

  23. 23

    测试一个对象是否是另一个实例类型的子类

  24. 24

    为什么我不能将系列类型设置为与Python Pandas等同于另一个系列类型

  25. 25

    为什么容器不能请求另一个?

  26. 26

    为什么不能在Enterprise Architect中将对象(类的实例)连接到另一个对象(类的实例)的特定属性?

  27. 27

    用另一个泛型扩展泛型类型

  28. 28

    如何为另一个泛型类使用泛型参数类型?

  29. 29

    依赖于Rust中另一个泛型的泛型类型

热门标签

归档