@sergeyfk

Как изменить код и стоит ли, чтобы не было предупреждения CA1009 анализатора кода?

Имеется такой код, на который анализатор ругается:
public event Action<int> event_SetStatusStripProgressBar_Value;
        private void SetStatusStripProgressBar_Value(object obj)
        {
            if (event_SetStatusStripProgressBar_Value != null)
                event_SetStatusStripProgressBar_Value((int)obj);
        }


Действительно ли стоит переписать данный код? Если да, то как?
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 3
lam0x86
@lam0x86
public sealed class ProgressChangedEventArgs : EventArgs
{
    public ProgressChangedEventArgs (int progress) { this.Progress = progress; }
    public int Progress { get; }
}

public event EventHandler<ProgressChangedEventArgs> StatusStripProgressChanged;
private void RaiseStatusStripProgressChanged(int progress)
{
    StatusStripProgressChanged?.Invoke(new ProgressChangedEventArgs(progress));
}
Ответ написан
@cicatrix
было бы большой ошибкой думать
Если у вас (или у вашего тимлида) нет ОКР, то можно и suppress сделать.
НО!

Тут при повторном рассмотрении углядел, что вы в obj передаёте не ссылку на объект, который событие отправляет, а какой-то параметр. В этом случае это действительно может ввести в заблуждение (как ввело меня только что, например, когда я подумал, что вы параметры не передаёте, а только ссылку на отправителя события). Я, не зная вашего кода, вижу событие и ОЖИДАЮ стандартного шаблона (особенно если вы используете тип object), и здесь мой шаблон "рвётся" :)

Во-первых, есть класс ProgressEventArgs, который служит ровно той цели, что вы здесь "свелосипедили".

Стиль написания кода - это, если уж честно, догма от Майкрософт, и вещь субъективная. Однако, нельзя считать эту догму плохой. Она задаёт общий шаблон для написания кода и позволяет потом легко свои решения масштабировать.

В общем, это ваше решение. Если код закрытый и никто, кроме вас его больше не увидит, и вы уверены, что и через несколько лет вы, просматривая этот фрагмент, будете чётко знать, что на самом деле в объекте obj типа object вы передаёте в событии целочисленный параметр состояния прогресса, то можете делать suppress этому кейсу.
Если же вы планируете публиковать этот код (это часть Open Source) проекта, то вердикт однозначный - переписывайте.
Ответ написан
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы