Per il primo metodo, i tipi dei due parametri devono essere uguali, ad esempio, int
e int
. Il tipo deve implementare l'interfaccia IComparable
.
Per il secondo metodo, i due parametri possono avere tipi diversi. Entrambi i tipi devono implementare l'interfaccia IComparable
, ma non devono essere uguali, ad esempio int
e string
.
Si noti che lo IComparable.CompareTo method genererà un'eccezione se i tipi non sono uguali. Quindi è meglio assicurarsi che i tipi siano in realtà lo stesso. Puoi farlo usando il tuo primo metodo, o ancora meglio usando il generico IComparable<T> interface.
La domanda di follow-up è, naturalmente: Qual è la differenza tra questi due metodi?
primo:
public static int Foo<T1, T2>(T1 first, T2 second) where T1 : IComparable<T2>
{
return first.CompareTo(second);
}
secondo:
public static int Foo<T>(IComparable<T> first, T second)
{
return first.CompareTo(second)
}
Risposta: Il primo metodo non scatola il primo argomento, mentre il secondo metodo fa.
non è il duplicato esatto di quel post, perché qui abbiamo due parametri e cambia alcuni criteri. guarda la prima risposta per vedere la differenza –