Existe uma maneira de fazer a conversão implícita dinâmica de tipos em c #?
Dada esta classe com um operador de conversão implícito:
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;
}
Agora posso fazer o seguinte:
long a = 5;
MyDateTime b = a;
Mas NÃO o seguinte:
long f = 5;
object g = f;
MyDateTime h = g;
Isso fornece um tempo de compilação:
Não é possível converter implicitamente o tipo 'objeto' para 'MyDateTime'.
Faz sentido para mim.
Agora eu modifico o exemplo anterior da seguinte maneira:
long f = 5;
object g = f;
MyDateTime h = (MyDateTime)g;
Isso compila bem. Agora eu recebo um tempo de execuçãoInvalidCastException
:
Não foi possível converter o objeto do tipo 'System.Int64' para digitar MyDateTime '.
Isso indica que os operadores de conversão implícita do C # são aplicados apenas no tempo de compilação e não são aplicados quando o tempo de execução do .NET está tentando converter dinamicamente um objeto para outro tipo.
Minhas perguntas:
Estou correcto?Existe alguma outra maneira de fazer isso?A propósito, o aplicativo completo é que eu estou usandoDelegate.DynamicInvoke()
para chamar uma função que leva umMyDateTime
parâmetro e o tipo de argumento para o qual estou passandoDynamicInvoke
é um longo.