Есть ли способ сделать динамическое неявное приведение типов в 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;
}

Теперь я могу сделать следующее:

long a = 5;
MyDateTime b = a;

Но НЕ следующее:

long f = 5;
object g = f;
MyDateTime h = g;

Это дает время компиляции:

Не удается неявно преобразовать тип «объект» в «MyDateTime».

Имеет смысл для меня.

Теперь я модифицирую предыдущий пример следующим образом:

long f = 5;
object g = f;
MyDateTime h = (MyDateTime)g;

Это хорошо компилируется. Теперь я получаю время выполненияInvalidCastException:

Невозможно привести объект типа «System.Int64» к типу MyDateTime.

Это говорит мне о том, что неявные операторы приведения в C # применяются только во время компиляции и не применяются, когда среда выполнения .NET пытается динамически привести объект к другому типу.

Мои вопросы:

Я прав?Есть ли другой способ сделать это?

Кстати, полное приложение, которое я используюDelegate.DynamicInvoke() вызвать функцию, которая принимаетMyDateTime параметр и тип аргумента, который я передаюDynamicInvoke это долго.

Ответы на вопрос(3)

Ваш ответ на вопрос