Voglio creare un metodo semplice che accetta sia il tipo di valore tipo e di riferimento, vale a dire int è il valore e la stringa è un riferimento.Sta creando un metodo generico C# che accetta il tipo di valore e il tipo di riferimento (nullable) possibili?
Quindi questo è quello che comincio con:
public bool areBothNotNull<T>(T? p1, T? p2)
{
return (p1.HasValue && p2.HasValue);
}
quindi voglio essere in grado di usare in questo modo:
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
Ma il primo problema che ho incontrato è
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'
Per procedere aggiungo un vincolo struct al mio metodo
public bool areBothNotNull<T>(T? p1, T? p2) where T : struct
Ma ora il metodo non accetterà chiamate in base alla stringa, e mi da questo errore:
The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method.
è possibile? O perché ci è stato impedito di farlo?
che sembra una cosa strana da voler fare? –
Questo non è strano, ha solo un dolce odore di C++. –