1. C# / Говнокод #9382

    +141

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    private void tlistObject_SelectedIndexChanged(object sender, EventArgs e)
    {
    	IMapObject oTarget = this.tlistObjects.SelectedItem as IMapObject;
    
    	if (oTarget != null)
    	{
    		if (this.SelectedObject != null)
    		{
    			this.SelectedObject.ObjectMode = ObjectModeElements.None;
    		}
    		this.SelectedObject = this.tlistObjects.SelectedItem as IMapObject;
    		this.SelectedObject.ObjectMode = ObjectModeElements.Selected;
    	}
    }

    (Is + Explicit приведение) или (As + проверка на Null)?
    Ход конём.
    ОБЯЗАТЕЛЬНОЕ использование this при обращении к полям, свойствам и методам текущего класса - отдельная тема. Это одна из особенностей неповторимого стиля, присущего аффтару. Весь код забит thisами под завязку.

    Запостил: ICELedyanoj, 10 Февраля 2012

    Комментарии (31) RSS

    • и где говно?
      Ответить
      • Приведение SelectedItem через As с созданием переменной для проверки на Null и еще одно приведение через As при присвоении.
        Ну и плюс thisы.
        Да, и имена переменных. oTarget, oItem, iResult... - тоже часть авторского стиля.
        Ответить
        • так и скажи: Я НИХУЯ НЕ ЗНАЮ C#.

          Это расово-верный, единственно-правильный безопасный способ приведения object к типу.
          Ответить
          • Так и скажи: "Я НИХУЯ НЕ УМЕЮ ЧИТАТЬ КОД".
            Достаточно один раз привести объект через AS, присвоить результат в oTarget, проверить результат на Null и после этого SelectedObject = oTarget. Два раза-то приводить зачем? На всякий случай?
            Ответить
            • да ты прав
              второй as не заметил
              Ответить
              • Это все из-за this.
                С ними код не читается.
                Ответить
                • >Это все из-за this.
                  This все из-за это.
                  Ответить
                • а я надеялся, что два до-диезника устроят срач о том, кто из них больше ниасилил...
                  Ответить
          • Еще представим себе ситуацию, что tlistObjects.SelectedItem у нас оказывается структурой.
            Двойное приведение через As приводит к двойной операции упаковки, что мало-мало добавляет работы мусорщику.
            Ответить
    • Поведайте нам, что плохого в использовании this
      Ответить
      • oMapData.Add(this._tempObject.id, new DirectionPointData(this._tempObject.id, this._tempObject, null, oRowView["pr211"].ToString(), oRowView["pr212"].ToString(), oRowView["pr222"].ToString(), oRowView["pr231"].ToString(), this._currentColor, oImageTmp, null));

        VS

        oMapData.Add(_tempObject.id, new DirectionPointData(_tempObject.id, _tempObject, null, oRowView["pr211"].ToString(), oRowView["pr212"].ToString(), oRowView["pr222"].ToString(), oRowView["pr231"].ToString(), _currentColor, oImageTmp, null));
        -------------------
        this._currentColor = this.YellowColor;
        --------------------
        this.map.AddRoute(this._currentRoute, oDir, this._proxy, new DirectionPointTooltipSettings(iMode, this._monitoringFormSettings.RoutesShowP ointNumber, this._monitoringFormSettings.RoutesShowA ctualTime, this._monitoringFormSettings.RoutesShowE stimateTime, this._monitoringFormSettings.RoutesShowP ointStatus, true, this._monitoringFormSettings.RoutesShowP rocessingTime, true));
        Даже не знаю как ответить.
        Ответить
        • это называется стиль. при чем достаточно распространенный:
          все instance-свойства вызывать через this.PropertyName
          Ответить
          • Очень странный стиль. Самое главное - в этом подходе минусов на порядок больше, чем плюсов.
            В нашей компании никто таким не страдает (уже). Первого и последнего страдальца выперли, а нам теперь после него кучу кода переделывать. This и двойное приведение - только цветочки.
            Ответить
      • this - ключевое слово, студия подсвечивает его синим, и код просто невозможно читать - распухание + рябит от ненужных в данном контексте ключевых слов.
        Ответить
        • Спорные и субъективные аргументы. Попробуйте ещё раз.
          Ответить
          • MSDN указывает места, где использование this необходимо:
            1. Для квалификации элементов, скрытых одинаковыми именами.
            2. Для передачи другим методам объекта в качестве параметра, например:

            CalcTax(this);

            3. Для объявления индексаторов.

            Если вы не видите ничего плохого в распухании кода за счет ненужных ключевых слов, то даже не буду пытаться еще раз.
            Ответить
            • ЕМНИП, MSDN не имеет ничего против использования this кругом. тот список, который ты указал - это места, где this необходим. в остальных местах он не является необходимым. но "не необходим" != "лишний". может, у человека яваскриптовое, питоновое или пхпшное прошлое, где без this нельзя?
              Ответить
              • В коде формы, написанной этим же автором был найден конструктор следующего вида (код уже пофиксен, напишу по памяти):

                class MyForm : Form
                {
                public MyForm()
                {
                InitializeComponent();
                .....
                Какой-то код
                .....
                this.InitializeComponent();
                }
                }

                Теперь скажите, что принудительное использование this делает код более читаемым.
                Такое использование this не запрещается, но нигде в том же MSDN я не видел кода с обращением к каждому полю через this.
                Ответить
            • Глупо - получать доступ к статическим членам через инстанс (в частности, this). Всё остальное дело вкуса.
              Основная причина распухания кода - неумение его организовать, а уж никак не использование this.
              Ответить
        • если имя аргумента совпадает с именем члена-класса, то без this не обойтись.
          Ответить
          • Конечно, это пункт 1 в рекомендации MSDN. Здесь же речь идет о каждом обращении к каждой переменной класса. Это раз.
            А два - правильное именование переменных класса легко сводит количество таких случаев к нулю.
            Ответить
            • Правильный подход при передаче параметра, например в конструкторе, это использование одинаковых имен. Поэтому ваше "А два" я бы отверг.
              Ответить
              • Абсолютно согласен с использованием одинаковых имен. Но.
                В нашем коде все приватные поля и свойства класса именуются по типу "_name", пабликовые - "Name", входящие аргументы - "name". Поэтому:
                1. При взгляде на имя всегда понятно чье это (и this не нужен для этого, аргумент от поля легко отличить).
                2. Имена аргументов и переменных класса никогда не совпадают, будучи при этом одинаковыми (как ни парадоксально).
                Ответить
                • Просто признайте, что вам не нравится использование this, и прекратите сливаться, ища объективные аргументы.
                  Ответить
                  • Просто признайте, что принудительное использование this вопреки здравому смыслу - ваша дурная привычка и тяжелое наследие.
                    Где вы увидели попытки слива? В согласии с мыслью о необходимости одинаковых имен аргументов и полей? Тогда прошу перечитать мой комментарий ещё раз.
                    Если я так уж неправ, то прошу вас аргументировать свою любовь к избыточному коду.
                    Ответить
    • =======================
      - this.SelectedObject = this.tlistObjects.SelectedItem as IMapObject;
      + this.SelectedObject = oTarget;
      Fixed?
      Ответить
    • Всегда пишу this в коде класса при обращении к его свойствам. Ничего плохого в этом не вижу. Держите минус
      Ответить

    Добавить комментарий