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