Comparações de tipo de valor em caixa
O que estou tentando obter aqui é uma comparação direta de valores de tipos primitivos in a bo
((object)12).Equals((object)12); // Type match will result in a value comparison,
((object)12).Equals((object)12d); // but a type mismatch will not. (false)
object.Equals((object)12,(object)12d); // Same here. (false)
Eu entendo o 'porquê'. Só não vejo um 'como'.
Os tipos são desconhecidos até o tempo de execução, onde poderiam ser qualquer tipo primitivo de uma fonte de dados. Isso inclui strings, datetime, bools, etc. Eu segui a feia rota de escrever um método de extensão que funciona com os dois tipos e depois lança antes de fazer uma comparação '==': (Para completar, incluí todos os tipos primitivos , mais aqueles em que eu estava interessado)
public static bool ValueEquals(this object thisObj, object compare)
{
if (thisObj is int)
{
int obj = (int)thisObj;
if (compare is int)
return (obj == (int)compare);
if (compare is uint)
return (obj == (uint)compare);
if (compare is decimal)
return (obj == (decimal)compare);
if (compare is float)
return (obj == (float)compare);
<... and so on for each primitive type ...>
}
if (thisObj is uint)
{
uint obj = (uint)thisObj;
if (compare is int)
return (obj == (int)compare);
if (compare is uint)
return (obj == (uint)compare);
<... Again for each primitive type ...>
}
if (thisObj is decimal)
{
decimal obj = (decimal)thisObj;
if (compare is int)
return (obj == (int)compare);
<... Etc, etc ...>
O método resultante acabou por ter mais de 300 linhas, o que foi bom (mas hediondo), mas agora preciso fazer mais do que apenas '=='. Eu preciso de>, <, <=,> =,! =.
Existe alguma coisa no Reflection que eu possa usar para comparações de tipo de valor em caix
Nada mesmo