给定两个类:
class BaseObject
{
}
class Some
{
public static implicit operator BaseObject(Some d)
{
Console.WriteLine("Some.implicit");
return new BaseObject();
}
}
我需要能够使用隐式运算符重载从 object
(实际上是 Some
)转换为 BaseObject
。我使用了显式转换,但由于 InvalidCastException
而无法正常工作:
object obj = new Some();
var baseObject = (BaseObject)(obj); // InvalidCastException here
更新 对于那些不了解隐式转换的人。这有效:
Some obj = new Some();
BaseObject baseObject = obj; // writes "Some.implicit"
问题是我收到 obj
作为 object
。
最佳答案
当源和目标类型在编译时已知时,转换的类型也在编译时确定。在这种情况下,BaseObject
派生自 object
,因此从 object
到 BaseObject
的转换被视为典型的向下转换,如果在运行时确定该对象不是 BaseObject
,则会失败。
要在运行时确定类型转换,您需要使用dynamic
。
dynamic obj = new Some();
var baseObject = (BaseObject)obj; // works
或者如果obj
的声明不能改变,
object obj = new Some();
var baseObject = (BaseObject)(dynamic)obj; // also works
关于c# - 使用隐式运算符重载进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27276209/