espero una sobrecarga es su mejor opción aquí:
string Add(object value, MyStruct1 expiration) {...}
string Add(object value, MyStruct2 expiration) {...}
Esto es aún más apropiado ya que no puede subclasificar una estructura, por lo tanto, el solo viable T
en su ejemplo seríaMyStruct1
y MyStruct2
- también puede tener métodos específicos, entonces.
Re restringir genéricos a múltiples tipos citados; en realidad no, e incluso si existiera, el nombre "Agregar" sugiere que desea utilizar el soporte del operador, que también no está en C# (3.0).
Sin embargo, en C# 4.0, dynamic
podría ser una opción aquí - esto actúa como una forma optimizada de pato-tipado; no obtendría soporte del compilador (validación, etc.), pero debería funcionar. Se podría emitir a dynamic
dentro el método:
string Add<T>(object value, T expiration) where T : struct {
dynamic valueDyn = value;
valueDyn += expiration; // or similar
// more code
}
Otra opción (en .NET 3.5) es utilizar el Operator
support en MiscUtil, utilizando Operator.Add
o Operator.AddAlternative
.
Estoy de acuerdo en que esto se debe lograr con las interfaces. ¡Este es uno de los propósitos de una interfaz! – Henri
Gracias por su respuesta. ¿Puede explicar la importancia de no poder clasificar el tipo? Restringir el parámetro a estructuras (tipos de valores) parece posible y contradictorio con su afirmación. Las estructuras a las que deseo restringirme son DateTime o TimeSpan, por lo que envolverlas en una interfaz parecería ser la única solución (o dejar un genericised). – Ben
No puede imponer una nueva interfaz en una estructura que no controla ('DateTime',' TimeSpan', etc.), entonces no: no puede hacer esto. –