É possível criar um método genérico em C # que aceita o tipo de valor (anulável) e o tipo de referência?
Eu quero criar um método simples que aceite ambostipo de valor etipo de referência parâmetros, ou seja, int é value e string é referência.
Então é assim que começo:
public bool areBothNotNull<T>(T? p1, T? p2)
{
return (p1.HasValue && p2.HasValue);
}
Então, eu quero poder usá-lo assim:
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
Mas a primeira questão que encontro é
O tipo 'T' deve ser um tipo de valor não anulável para usá-lo como parâmetro 'T' no tipo ou método genérico 'System.Nullable'Para continuar, adiciono uma restrição de estrutura ao meu método
public bool areBothNotNull<T>(T? p1, T? p2) where T : struct
Mas agora o método não aceita as chamadas baseadas em string e me fornece este erro:
O tipo 'string' deve ser um tipo de valor não anulável para usá-lo como parâmetro 'T' no tipo ou método genérico.Isso é possível? Ou por que somos impedidos de fazer isso?