小编P. *_*kis的帖子

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

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

KnownType item = (KnownType) parameter;
Run Code Online (Sandbox Code Playgroud)

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

protected KnownType ConvertToKnownType()
{
    // conversion code goes here
}
Run Code Online (Sandbox Code Playgroud)

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

public static implicit operator KnownType(MyClass source)
{
    KnownType result;
    // conversion goes here
    return result;
}
Run Code Online (Sandbox Code Playgroud)

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

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

KnownType事实上DataRowView,要清除事物,虽然它MyClass是一个包装类DataRowView,必须从其他类型派生.MyClass保持对a的引用DataRowView.我没有绑定ComboBox.DataSource到a DataView,而是将其绑定到a ,IList<MyClass>但我仍然需要ComboBox能够访问DataRowView列值,就像我绑定了一样IList<DataRowView>.不幸的是,转换操作符的工作方式与我担心的方式相同:它只考虑编译时类型信息来进行转换(但是在同一继承树中的类型之间进行转换时会使用运行时类型信息).

c# casting

7
推荐指数
1
解决办法
158
查看次数

标签 统计

c# ×1

casting ×1