En C#
, est-il généralement une mauvaise pratique d'utiliser un argument générique pour modifier le comportement d'une méthode générique?CLR méthode générique branchement basé sur le type de l'argument générique
Dans l'exemple:
class Foo { }
class Bar { }
void GenericMethod<T>()
{
if (typeof(T) == typeof(Foo))
{
Console.WriteLine("execute action for Foo");
}
if (typeof(T) == typeof(Bar))
{
Console.WriteLine("execute action for Bar");
}
}
void NonGenericMethod(Type type)
{
if (type == typeof(Foo))
{
Console.WriteLine("execute action for Foo");
}
if (type == typeof(Bar))
{
Console.WriteLine("execute action for Bar");
}
}
Les différences de performances mises à part, les deux méthodes ont le même effet. Ce qui m'interroge, c'est de savoir si c'est une bonne idée d'utiliser l'argument générique pour modifier le comportement de la méthode (faire des branchements). Cela pourrait-il être considéré comme un effet secondaire?
_Les différences de performances mises à part_ - Quelles sont les différences de performances? – stuartd
En supposant que vous ne pouvez pas utiliser de surcharges (pourquoi pas?), Il n'y a rien de foncièrement mauvais avec cela. – Rob
Vous auriez pu mettre cette méthode sur la classe de base de Square et Circle, donc utilisez simplement l'héritage régulier. Sinon, il n'y a pas beaucoup de différence. – Evk