相关疑难解决方法(0)

有没有办法在C#中进行动态隐式类型转换?

给定此类具有隐式转换运算符:

public class MyDateTime
{
    public static implicit operator MyDateTime(System.Int64 encoded)
    {
        return new MyDateTime(encoded);
    }

    public MyDateTime(System.Int64 encoded)
    {
        _encoded = encoded;
    }
    System.Int64 _encoded;
}
Run Code Online (Sandbox Code Playgroud)

我现在可以做以下事情:

long a = 5;
MyDateTime b = a;
Run Code Online (Sandbox Code Playgroud)

但不是以下内容:

long f = 5;
object g = f;
MyDateTime h = g;
Run Code Online (Sandbox Code Playgroud)

这给出了编译时间:

无法将类型'object'隐式转换为'MyDateTime'.

我感觉合理.

现在我修改前面的例子如下:

long f = 5;
object g = f;
MyDateTime h = (MyDateTime)g;
Run Code Online (Sandbox Code Playgroud)

编译好了.现在我得到一个运行时InvalidCastException:

无法将"System.Int64"类型的对象强制转换为"MyDateTime"类型.

这告诉我C#隐式转换运算符仅在编译时应用,并且在.NET运行时试图将对象动态转换为另一种类型时不应用.

我的问题:

  1. 我对么?
  2. 还有其他方法可以做到这一点吗?

顺便说一句,完整的应用程序是我Delegate.DynamicInvoke()用来调用一个带MyDateTime参数的函数,而我传递给的参数的类型很DynamicInvoke长.

c# dynamic-cast type-conversion implicit-cast dynamic-invoke

11
推荐指数
1
解决办法
2949
查看次数