2008-10-21 13 views

Respuesta

36

No, no tengo miedo. Las únicas cosas que puede hacer con las limitaciones son:

  • where T : class - T debe ser un tipo de referencia
  • where T : struct - T debe ser un tipo de valor no anulable
  • where T : SomeClass - T debe ser SomeClass o derivar de que
  • where T : ISomeInterface - T debe ser ISomeInterface o implementarlo
  • where T : new() - T debe tener un constructor sin parámetros pública

Son posibles varias combinaciones, pero no todas. Nada sobre los atributos.

+1

would 'where T: ISerializable' no? – crdx

+1

@ user457104: Eso no obligaría a aplicar el atributo, no. –

+0

ah sí, whoops. – crdx

4

Miedo no. Lo mejor que puede hacer es controlar el tiempo de ejecución en Type.IsSerializable.

7

Lo que sé; no puedes hacer esto. ¿Has pensado en agregar un método de 'Inicializar' o algo similar?

public void Initialize<T>(T obj) 
{ 
    object[] attributes = obj.GetType().GetCustomAttributes(typeof(SerializableAttribute)); 
    if(attributes == null || attributes.Length == 0) 
      throw new InvalidOperationException("The provided object is not serializable"); 
} 

No he probado este código, pero espero que entiendan mi punto.

+2

Si va a hacer una prueba en tiempo de ejecución, el método IsDefined es más simple: http://msdn.microsoft.com/en-us/library/system.reflection.memberinfo.isdefined.aspx –

+0

Sí, pensé en un control en tiempo de ejecución, pero quería usar la restricción where. Gracias por la respuesta de todos modos – juan

+0

Jon: Tienes toda la razón en esto. No sé cómo me he perdido el método IsDefined, ¡pero gracias por señalarlo! – Patrik

0

Si está buscando cualquier clase que sea serializable, creo que no tiene suerte. Si está buscando objetos que ha creado, puede crear una clase base que sea serializable y que todas las clases que desee respaldar se deriven de ella.

0

Sé que esto es viejo, pero estoy usando un constructor estático para comprobar. Es posterior pero le permite lanzar un error en el tiempo de ejecución.

+0

puede agregar una muestra de código? –

Cuestiones relacionadas