当前位置: 首页 > 知识库问答 >
问题:

C#通过强制转换运算符进行动态转换

邢法
2023-03-14

我有一些我无法控制的代码。此代码接受一个对象参数,并尝试将其转换为编译时已知的类型,如下所示:

KnownType item = (KnownType) parameter;

在C#中是否可以设计一个自定义类MyClass(不是从KnownType派生的),该类可以作为参数传递给上述代码,并通过上述代码转换为KnownType,前提是MyClass可以使用其成员方法将自身转换为KnownType

protected KnownType ConvertToKnownType()
{
    // conversion code goes here
}

我曾尝试实现这样的自定义转换运算符:

public static implicit operator KnownType(MyClass source)
{
    KnownType result;
    // conversion goes here
    return result;
}

但是它不起作用(它没有被使用)。假设转换运算符仅在编译时已知源类型、目标类型和转换运算符时才起作用,这是否正确?

编辑:我最初没有提供有关执行转换的代码的更多细节,因为我认为这与此无关,因为我主要对cast操作符的实现方式感兴趣,即它是否需要查看运行时类型以找到合适的转换器,还是在编译时做出决定?

为了澄清问题,KnownType实际上是DataRowView,而MyClassDataRowView的包装类,必须从其他类型派生MyClass保留对DataRowView的引用。而不是绑定组合框。数据源到一个数据视图,我将它绑定到一个IList


共有1个答案

景靖琪
2023-03-14

不,这是不可能的。提供的cast只有在您能够从该类派生类的情况下才会成功。任何不基于继承的转换类型都需要执行转换的类执行与其所做的不同的操作。

我假设cast操作符只有在编译时已知源类型、目标类型和转换操作符时才起作用,对吗?

 类似资料:
  • C++ 运算符 强制转换运算符是一种特殊的运算符,它把一种数据类型转换为另一种数据类型。强制转换运算符是一元运算符,它的优先级与其他一元运算符相同。 大多数的 C++ 编译器都支持大部分通用的强制转换运算符: (type) expression 其中,type 是转换后的数据类型。下面列出了 C++ 支持的其他几种强制转换运算符: const_cast<type> (expr): const

  • 问题内容: 我正在尝试调试Java中涉及ClassCastException的问题。为了解决该问题,我需要知道从Object转换为特定类型时发生了什么。 谁能向我解释Java Cast操作符如何在Java级别和JVM级别工作? 问题答案: JLS是否足够好? 强制转换将应用于强制转换操作符的操作数(第15.16节):操作数表达式的类型必须转换为强制转换操作符显式命名的类型。铸造上下文允许使用: 身

  • 问题内容: 我很难理解一些代码,这些代码显示了一个示例,该示例如何将Java中的double转换为byte [],反之亦然。 这是用于将双精度型转换为byte []的代码: 这是用于将byte []转换为double的代码: 好的,这是我不太了解的部分。 似乎强制转换发生在实际的按位运算之前,因为作者说 该表达式将把字节放在长[…]处,然后应用mask删除java施加的符号 在实际转换之前,如何将

  • 本文向大家介绍如何在C++中通过模板去除强制转换,包括了如何在C++中通过模板去除强制转换的使用技巧和注意事项,需要的朋友参考一下 C++与C语言相比是一个强类型语言,即对数据类型的匹配程度较C更为严格,这有助于避免程序员在编程过程中由于粗心所犯之错。由于历史原因,C++中仍保留了reinterpret_ cast、static_cast等用于强制类型转换的关键字,但从语言向强类型发展的趋势来看,

  • 本文向大家介绍C#中的自动类型转换和强制类型转换,包括了C#中的自动类型转换和强制类型转换的使用技巧和注意事项,需要的朋友参考一下 前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢? 运行结果是:1 我们把一个整型的变量赋值给了一个浮点型的变量,可以正常的输出,如果我们把一个浮点型的变量赋值给一个整型的变量呢? 这样就会报错。 为什么呢?因为我们之前说过,变量就像一个容器,

  • 主要内容:static_cast 关键字,const_cast 关键字,reinterpret_cast 关键字,dynamic_cast 关键字上节讲到,隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。 但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有表明存在什么风险,风险程度如何。再者,C风格的强制类型转换统一使用 ,而 在代码中随处可见,所以也不利于使用文本检索工具(例如 Windows 下的 Ctr