2011-04-21 17 views
7

ReSharper me dice que MemberInfo.DeclaringType nunca puede ser nulo: enter image description hereadvertencia ReSharper extraña en MemberInfo.DeclaringType

Sin embargo, cuando se ejecuta este código, se imprime el texto "miembro de nivel superior". No lo entiendo, ¿qué pasa aquí?

+0

¿Hizo una limpieza completa y reconstruyó? A menudo, el reafilador pone advertencias extrañas porque no ha vuelto a ejecutar su análisis lo suficiente. De lo contrario, puede ser un error. – captncraig

+0

@CMP, jep lo hice. Y me parece extraño que esto sea un error, ya que los atributos como NotNullAttribute, se asignan automáticamente a las bibliotecas estándar. Si hubo un error en ese código, eso debe haberse notado antes. – JBSnorro

+0

Quise decir un error en el motor de análisis estático de Resharper. – captncraig

Respuesta

6

Resharper es simplemente incorrecto aquí. MemberInfo es un tipo abstract y es posible que una aplicación arbitraria para regresar lo que quiera incluyendo null

Ejemplo:

class EvilMemberInfo : MemberInfo 
{ 
    public override System.Type DeclaringType 
    { 
     get { return null; } 
    } 

    // Rest omitted for brevity 
} 
+0

Eso es exactamente el sistema que reemplaza. El tipo se usa para DeclaringType. Tal vez deberían llamarlo EvilType. =] – rsbarro

+0

Recientemente afirmé haber encontrado un error en Resharper, pero resultó que estaba equivocado. Esta vez, sin embargo, dije mi pregunta un poco menos agresiva, pero estoy de acuerdo con usted. – JBSnorro

+0

@rsbarro, no! Eso no es exactamente la anulación de System.Type, ya que los tipos se pueden anidar .... – JBSnorro

10

contratos Microsoft Código de Estados Unidos que nunca es nula.

// System.Reflection.MemberInfo 
public virtual Type DeclaringType 
{ 
    get 
    { 
     Contract.Ensures(Contract.Result<Type>() != null, null, "Contract.Result<Type>() != null"); 
     Type result; 
     return result; 
    } 
} 

So ReSharper se basa en los contratos de código aquí.

+0

Ok, lo publiqué en el foro de contratos de código, http://social.msdn.microsoft.com/Forums/en-US/codecontracts/thread/fdf1436a-e843-408c -b932-c012e03e72cd – JBSnorro