Quiero crear un método simple que acepte los tipos de valor y tipo de referencia parámetros, es decir, int es value y string es referencia.¿Es posible crear un método genérico de C# que acepte el tipo de valor (anulable) y el tipo de referencia?
Así que esto es lo que comienzo con:
public bool areBothNotNull<T>(T? p1, T? p2)
{
return (p1.HasValue && p2.HasValue);
}
por lo que quiero ser capaz de utilizar de esta manera:
var r1 = areBothNotNull<int>(3, 4); // will be true
var r2 = areBothNotNull<int>(3, null); // will be false
var r3 = areBothNotNull<string>("three", "four"); // will be true
var r4 = areBothNotNull<string>(null, "four"); // will be false
Pero el primer problema que encontramos es
The type 'T' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable'
Para continuar agrego una restricción de estructura a mi método
public bool areBothNotNull<T>(T? p1, T? p2) where T : struct
Pero ahora el método no aceptará llamadas en función de la cuerda, y me da este error:
The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method.
Es esto posible? ¿O por qué se nos impide hacer esto?
que parece una cosa extraña de querer hacer? –
Esto no es extraño, solo tiene un dulce olor a C++. –