Удалите проблему, я должен игнорировать предупреждение Visual Studio? - PullRequest
0 голосов
/ 25 ноября 2018

Я создал пользовательский элемент управления, который наследуется от Panel.У меня есть набор кистей ручек, и VS предупреждает меня (CA2213: одноразовые поля должны быть удалены)

У меня есть такой метод:

protected override void Dispose(bool disposing)
{
    if (disposing && (components != null))
    {
        myPen?.Dispose();
        myBrush?.Dispose();
        // etc...
        components.Dispose();
    }
    base.Dispose(disposing);
}

Что я делаю не так?Спасибо за ваши ответы!

Редактировать:

Я подавил предупреждение, переопределив Dispose () в моем пользовательском элементе управления и освободив все поля IDisposable там.

protected new void Dispose() 
{
    if (!disposed)
    {
       myPen?.Dispose();
       // etc..
       disposed = true;
    }

    base.Dispose(disposed);
}

Пожалуйста, дайте мне знать, если я все делаю правильно!

Редактировать # 2:

Я могу принять ответ, но был ли первый образец кода верным?

1 Ответ

0 голосов
/ 26 ноября 2018
if (disposing && (components != null))

Из других знаний о том, как работает класс, может быть вполне разумно, что components, равное нулю, означает, что никакого другого удаления не требуется, но анализ, который выдает предупреждение, не поймет этого.

protected new void Dispose()

Это бесполезно, потому что оно не будет вызвано при утилизации.

Я бы, вероятно, выбрал:

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        myPen?.Dispose();
        myBrush?.Dispose();
        // etc...
        components?.Dispose();
    }

    base.Dispose(disposing);
}

Хотя учтите, что ?. пока очень хорошая идеяиногда может также дать ложное предупреждение.OTOH, если вы делаете знаете, что components == null означает, что удаление не требуется, тогда ваш исходный код в порядке, просто отключите предупреждение.

...