Tips n Tricks
Atom
20.01.2011


Постоянно смотрю на изменяющийся код. Весь поток контролировать не могу, поэтому выбираю некоторые места по принципу Медведь на рыбалке в период нереста. Далее, привожу что увидел и как бы изменил. Рекомендую смотреть всем (даже если свой код не увидели), чтобы и самому учиться и не допустить в будущем:


  1. Код
    foreach (KeyValuePair<int, List<string>> pair in _sections)

    Тут лучше использовать ключевое слово var
    Код
    foreach (var pair in _sections)

  2. Код
    String.Join(Environment.NewLine, pair.Value.ToArray())

    С помощью Ecng.Common пишется короче
    Код
    pair.Value.Join(Environment.NewLine)

  3. Код
    protected List<string> _sectionNames;

    Тут или область видимости должна быть private или название должно быть SectionName.
  4. Код
    String.Format("{0}={1}", key, value)

    С помощью Ecng.Common пишется короче
    Код
    "{0}={1}".Put(key, value)

  5. Код
    _sections[_sectionNames.IndexOf(sectionName)];

    Лучше проверить через Contains.
  6. Код
    try
    {
    ....
    }
    catch (KeyNotFoundException ex)
    {
    throw new KeyNotFoundException(String.Format("Неопознанный раздел конфиг-файла: {0}", sectionName), ex);
    }

    Старайтесь минимизироваться перехват исключений. В том случае это решается через простую проверку на существование в коллекции.
  7. Код
    throw new InvalidOperationException(String.Format("Ключ {0} не найден", key));

    Я бы заменил на ArgumentException. Он как то более осмысленный.
  8. Не пишите Decimal, Int64, String или Single. Понятно, что это межъязыковое название. Но лучше использовать то, что родное для C#.
  9. Код
    public const int DEFAULT_PLAZA2_PORT = 4001;

    Стиль именования как в Win32 API. Последний умер де факто много лет назад, наследие его живет и по сей день.[biggrin]
  10. Добавляйте xml комментарии к самим классам, а не только его членам (видел в некоторых местах через // что есть совсем не то). И не забывайте про русский язык. В конце предложения ставится точка.
  11. Пользуйтесь R#. Он показывает допущенные ошибки и предупреждает заранее о неправильном коде.



Теги:


Спасибо:


< 1 2 
Mikhail Sukhov

Фотография
Дата: 08.05.2011
Ответить


Подниму топик парочкой советов:


  1. internal на методы, свойста и поля (но не типа) в C# признак плохого дизайна. Говорит о том, что приосходит размытость границ логики.
  2. Код
    Trace.WriteLineIf(TracingLevel > 2, record.GetStrings().Join(";"));
    Плох тем, что не важно, есть необходимый уровень трассировки или нет, строчка будет собираться всегда. Если такая конструкция встречается в коде, который вызывается часто, может снизить производительность.
  3. Любите readonly. Тоесть, когда создаете поля, сразу их делайте readonly. Снять атрибут можно всегда. Но он предотвратит от нежелательной логики перетирания значения.
  4. Два кода абсолютно эквивалентны:
    Код
    public class RootClass
    {
    private class NestedClass
    {
    internal int Prop { get; set; }
    }
    }


    Код
    public class RootClass
    {
    private class NestedClass
    {
    public int Prop { get; set; }
    }
    }

Спасибо:

aspirant

Фотография
Дата: 08.05.2011
Ответить


Mikhail Sukhov Перейти
Подниму топик парочкой советов:


  1. internal на методы, свойста и поля (но не типа) в C# признак плохого дизайна. Говорит о том, что приосходит размытость границ логики.
  2. Код
    Trace.WriteLineIf(TracingLevel > 2, record.GetStrings().Join(";"));
    Плох тем, что не важно, есть необходимый уровень трассировки или нет, строчка будет собираться всегда. Если такая конструкция встречается в коде, который вызывается часто, может снизить производительность.


Сделал криво, знаю. Уже думал над тем, чтобы переделать + поменять internal на public. В релиз не будет попадать вообще: выделю в отдельный метод с аттрибутом [Conditional("DEBUG")]
Спасибо:

anothar

Фотография
Дата: 09.05.2011
Ответить


Добрый день. Если верить http://www.codeproject.com/KB/cs/WeakEvents.aspx, кот. ссылается на Ecma cпецификацию, то для обеспечения потокобезопасности делегатов необходимо еще и локирование:
Код

EventHandler eh;
lock (this) { eh = MyEvent; }
if (eh != null) eh(this, EventArgs.Empty);
Спасибо:

aspirant

Фотография
Дата: 27.05.2011
Ответить


@esper, может выставишь у себя tab'ы (Tools \ Options \ Text Editor \ Tab \ Keep tabs)?
Спасибо:

esper

Фотография
Дата: 28.05.2011
Ответить


aspirant Перейти
@esper, может выставишь у себя tab'ы (Tools \ Options \ Text Editor \ Tab \ Keep tabs)?

Сделал[smile]
Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy