2011-03-02 21 views
6

Digamos que tengo una interfaz con una propiedad de solo lectura y una clase concreta donde la propiedad se crea una instancia en el constructor y se marca como de solo lectura.Advertencias de Prevent Resharper "Posible excepción de referencia nula"

internal interface IExample 
{ 
    ObservableCollection<string> Items { get; } 
} 


internal class Example : IExample 
{ 
    private readonly ObservableCollection<string> _items; 

    public Example() 
    { 
     _items = new ObservableCollection<string>(); 
    } 

    public ObservableCollection<string> Items 
    { 
     get { return _items; } 
    } 
} 

Cuando uso la interfaz Resharper me advierte que podría tener una posible referencia nula en el código de llamada.

public class ExampleWithWarnings 
{ 
    public void Show() 
    { 
     IExample example = new Example(); 

     // resharper warns about null reference 
     example.Items.Add("test"); 
    } 
} 

Me doy cuenta de que, por definición, la interfaz no garantiza que la propiedad tenga un valor. (También reconozco que las propiedades en las interfaces no son ideales). Pero sé que esta propiedad siempre tendrá un valor.

¿Hay algún atributo mágico que pueda poner en la interfaz que impida que Resharper muestre una advertencia? Prefiero no tener que decorar todos los usos de la clase con una advertencia de desactivar pragma.

+1

No creo que consideraría la desinstalación de ReSharper? Posiblemente pueda apagarlo inicializando el miembro de solo lectura directamente en lugar de hacerlo en el constructor. Es lo mismo. –

+0

¿Qué versión de ReSharper estás usando? –

+0

@Hans, el problema no es la clase concreta. – bryanbcook

Respuesta

7

Sí, hay un atributo que puede usar: JetBrains.Annotations.NotNullAttribute. Pero no necesita agregar una referencia a ReSharper en su proyecto. Puede usar su propia implementación: abra las opciones de ReSharper, y debajo de Code Inspection> Code Annotations encontrará una "Copia de implementación predeterminada al portapapeles". Ahora solo pegue eso en un archivo de código en su proyecto. Incluso puedes cambiar el espacio de nombres.

The Code Annotations settings

Y entonces el atributo palmada en la propiedad de interfaz.

También debe echar un vistazo bajo Code Inspection> Settings y seleccionar "Asumir que la entidad puede ser nula ... cuando la entidad está explícitamente marcada con el atributo CanBeNull, o marcada como nula". De esta forma solo recibirás advertencias en los miembros que explícitamente señalas como problemáticos.

The Code Inspection settings

Cuestiones relacionadas