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

弗拉基米尔·萨切克(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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

我可以在javascript中将一个类的实例动态转换为另一个类吗?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

将对象实例转换为另一个实例的引用?

来自分类Dev

为什么我不能将右值引用传递给C ++ 11中的另一个函数?

来自分类Dev

为什么我不能将json数据传递到另一个PHP文件?

来自分类Dev

为什么我不能将数据传输到另一个 HTML 页面

来自分类Dev

为什么我不能为另一个类拉一个方法?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么我不能将一个函数中定义的函子传递给另一个函数?

来自分类Dev

为什么我不能将这些信息从一个反应组件推送到另一个组件?

来自分类Dev

numpy:为什么我不能将一个矩阵分配给另一个矩阵的索引部分?

来自分类Dev

为什么我的计算列中的DAX公式在一个实例中而不是在另一个实例中使用传播进行过滤?

来自分类Dev

类型转换为一个类的实例

来自分类Dev

python如何将一个类的实例变量转换为另一个类?

来自分类Dev

实例化一个对象的类型取决于另一个对象的类型

来自分类Dev

Java泛型的另一个泛型

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

    我可以在javascript中将一个类的实例动态转换为另一个类吗?

  5. 5

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

  6. 6

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

  7. 7

    将对象实例转换为另一个实例的引用?

  8. 8

    为什么我不能将右值引用传递给C ++ 11中的另一个函数?

  9. 9

    为什么我不能将json数据传递到另一个PHP文件?

  10. 10

    为什么我不能将数据传输到另一个 HTML 页面

  11. 11

    为什么我不能为另一个类拉一个方法?

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

    为什么我不能将一个函数中定义的函子传递给另一个函数?

  19. 19

    为什么我不能将这些信息从一个反应组件推送到另一个组件?

  20. 20

    numpy:为什么我不能将一个矩阵分配给另一个矩阵的索引部分?

  21. 21

    为什么我的计算列中的DAX公式在一个实例中而不是在另一个实例中使用传播进行过滤?

  22. 22

    类型转换为一个类的实例

  23. 23

    python如何将一个类的实例变量转换为另一个类?

  24. 24

    实例化一个对象的类型取决于另一个对象的类型

  25. 25

    Java泛型的另一个泛型

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档