Clase genérica con tipos nullables

01/01/2008 - 01:24 por Clara | Informe spam
Hola,

No es posible definir una clase que genèrica que acepte tipos nullables?

algo asi:

class P <T>
{
private T _i1;
private T _i2;

public P (T i1, T i2) {_i1 = i1; _i2 = i2;}

public bool Error {
get {
if (_i1.HasValue && _i2.HasValue) //Esto no compila.
{

}
}

Tengo una clase con dos campos privados del tipo decimal?, (en el ejemplo T
seria decimal?). Y esta misma clase la queria hacer genérica, puesto que la
tengo que repetir con valores tipos DateTime?, Int?, ... pero por lo que
veo, no se puede.
O si?

Grácias.

Preguntas similare

Leer las respuestas

#6 Alberto Poblacion
01/01/2008 - 19:30 | Informe spam
"Clara" wrote in message
news:
Como podria hacer la comparacion ">" entre las variables _i1 y _i2? he
probado con (T)_i1 > (T)_i2 o (T?)_i1 > (T?)_i2, pero nada.



Tendrías que meter un "constraint" en la declaración del Generic para
indicar que soporta la comparación (por ejemplo, a través del interfaz
IComparable):

class P<T> where T: struct,IComparable
{
...
return _i1.CompareTo(_i2)>0;
}
Respuesta Responder a este mensaje
#7 Clara
01/01/2008 - 20:11 | Informe spam
Hola Alberto,

class P<T> where T: struct, IComparable<T>
{
.
return _i1.CompareTo(_i2); //System.Nullable no contiene una definición
para CompareTo()
}

creo que hoy no es mi dia de suerte. .. :-(

grácias!



"Alberto Poblacion"
escribió en el mensaje news:
"Clara" wrote in message
news:
> Como podria hacer la comparacion ">" entre las variables _i1 y _i2? he
> probado con (T)_i1 > (T)_i2 o (T?)_i1 > (T?)_i2, pero nada.

Tendrías que meter un "constraint" en la declaración del Generic para
indicar que soporta la comparación (por ejemplo, a través del interfaz
IComparable):

class P<T> where T: struct,IComparable
{
...
return _i1.CompareTo(_i2)>0;
}



Respuesta Responder a este mensaje
#8 Octavio Hernandez
01/01/2008 - 23:03 | Informe spam
Clara,

Estabas en el buen camino, pero la idea no es comparar los nulables, sino
sus valores:

class P<T> where T: struct, IComparable
{
private T? _i1;
private T? _i2;

public P(T? i1, T? i2) { _i1 = i1; _i2 = i2; }

public bool Error
{
get
{
return _i1 == null || _i2 == null;
}
}

public string Filtro(string nombreVariable)
{
if (_i1 == null && _i2 == null)
return "";
else if (_i1 == null)
return nombreVariable + " <= " + _i2.Value.ToString();
else if (_i1.Value.CompareTo(_i2.Value) > 0)
throw new Exception("KK");
else
{
return ""; // etc.
}
}

public static bool Test1()
{
P<int> parDeEnteros = new P<int>(3, null);
return !parDeEnteros.Error;
}
}

"Clara" wrote in message
news:%23%
Hola Alberto,

class P<T> where T: struct, IComparable<T>
{
.
return _i1.CompareTo(_i2); //System.Nullable no contiene una definición
para CompareTo()
}

creo que hoy no es mi dia de suerte. .. :-(

grácias!



"Alberto Poblacion"
escribió en el mensaje news:
"Clara" wrote in message
news:
> Como podria hacer la comparacion ">" entre las variables _i1 y _i2? he
> probado con (T)_i1 > (T)_i2 o (T?)_i1 > (T?)_i2, pero nada.

Tendrías que meter un "constraint" en la declaración del Generic para
indicar que soporta la comparación (por ejemplo, a través del interfaz
IComparable):

class P<T> where T: struct,IComparable
{
...
return _i1.CompareTo(_i2)>0;
}







Respuesta Responder a este mensaje
#9 Clara
02/01/2008 - 12:41 | Informe spam
Perfecto!
Muchísimas grácias a los dos!

saludos

"Octavio Hernandez" escribió en el mensaje
news:
Clara,

Estabas en el buen camino, pero la idea no es comparar los nulables, sino
sus valores:

class P<T> where T: struct, IComparable
{
private T? _i1;
private T? _i2;

public P(T? i1, T? i2) { _i1 = i1; _i2 = i2; }

public bool Error
{
get
{
return _i1 == null || _i2 == null;
}
}

public string Filtro(string nombreVariable)
{
if (_i1 == null && _i2 == null)
return "";
else if (_i1 == null)
return nombreVariable + " <= " + _i2.Value.ToString();
else if (_i1.Value.CompareTo(_i2.Value) > 0)
throw new Exception("KK");
else
{
return ""; // etc.
}
}

public static bool Test1()
{
P<int> parDeEnteros = new P<int>(3, null);
return !parDeEnteros.Error;
}
}

"Clara" wrote in message
news:%23%
> Hola Alberto,
>
> class P<T> where T: struct, IComparable<T>
> {
> .
> return _i1.CompareTo(_i2); //System.Nullable no contiene una


definición
> para CompareTo()
> }
>
> creo que hoy no es mi dia de suerte. .. :-(
>
> grácias!
>
>
>
> "Alberto Poblacion"
> escribió en el mensaje news:
>> "Clara" wrote in message
>> news:
>> > Como podria hacer la comparacion ">" entre las variables _i1 y _i2?


he
>> > probado con (T)_i1 > (T)_i2 o (T?)_i1 > (T?)_i2, pero nada.
>>
>> Tendrías que meter un "constraint" en la declaración del Generic


para
>> indicar que soporta la comparación (por ejemplo, a través del interfaz
>> IComparable):
>>
>> class P<T> where T: struct,IComparable
>> {
>> ...
>> return _i1.CompareTo(_i2)>0;
>> }
>>
>>
>>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida