Предотвратить предупреждения Resharper "Возможное исключение нулевой ссылки"
Допустим, у меня есть интерфейс со свойством только для чтения и конкретным классом, в котором свойство создается в конструкторе и помечается как доступное только для чтения.
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; }
}
}
Когда я использую интерфейс, Resharper предупреждает меня, что в коде вызова может быть возможная нулевая ссылка.
public class ExampleWithWarnings
{
public void Show()
{
IExample example = new Example();
// resharper warns about null reference
example.Items.Add( "test" );
}
}
Я понимаю, что по определению интерфейс не гарантирует, что свойство будет иметь значение. (Я также признаю, что свойства на интерфейсах не идеальны). Но я знаю, что это свойство всегда будет иметь значение.
Есть ли какой-нибудь магический атрибут, который я могу добавить в интерфейс, который бы помешал Resharper показывать предупреждение? Я бы предпочел не украшать все виды использования класса предупреждением об отключении прагмы.
2 ответа
Да, есть атрибут, который вы можете использовать: JetBrains.Annotations.NotNullAttribute
, Но вам не нужно добавлять ссылку на ReSharper в ваш проект. Вы можете использовать свою собственную реализацию: откройте параметры ReSharper, и в разделе "Проверка кода"> "Аннотации кода" вы найдете "Копировать реализацию по умолчанию в буфер обмена". Теперь просто вставьте это в файл кода в вашем проекте. Вы даже можете изменить пространство имен.
Затем добавьте атрибут в свойство интерфейса.
Вам также следует заглянуть в Code Inspection > Settings и выбрать "Предположить, что сущность может быть нулевой... когда сущность явно помечена атрибутом CanBeNull или проверена на нулевую". Таким образом, вы будете получать предупреждения только от тех участников, которые явно помечены как проблемные.
Вы можете уменьшить это предупреждение до предложения. Вы также можете редактировать внешние файлы аннотаций для создания пользовательских правил или поведения: http://msmvps.com/blogs/peterritchie/archive/2008/07/21/working-with-resharper-s-external-annotation-xml-files.aspx