﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Tips n Tricks</title>
  <id>~/topic/1327/tips-n-tricks/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-15T07:07:02Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=1327" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/8392/</id>
    <title type="text">aspirant: @esper, может выставишь у себя tab&amp;apos;ы (Tools \ Options \ Text Editor \ Tab \ Keep tabs)? Сд...</title>
    <published>2011-05-28T04:14:52Z</published>
    <updated>2011-05-28T04:14:52Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.ru/users/5990/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(8391)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;
@esper, может выставишь у себя tab'ы (Tools \ Options \ Text Editor \ Tab \ Keep tabs)?
Сделал[smile]&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/8391/</id>
    <title type="text">@esper, может выставишь у себя tab&amp;apos;ы (Tools \ Options \ Text Editor \ Tab \ Keep tabs)? </title>
    <published>2011-05-27T18:06:11Z</published>
    <updated>2011-05-27T18:06:11Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.ru/users/6114/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;@esper, может выставишь у себя tab'ы (Tools \ Options \ Text Editor \ Tab \ Keep tabs)?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7993/</id>
    <title type="text">Добрый день. Если верить http://www.codeproject.com/KB/cs/WeakEvents.aspx, кот. ссылается на Ecma cп...</title>
    <published>2011-05-09T10:33:26Z</published>
    <updated>2011-05-09T10:33:26Z</updated>
    <author>
      <name>anothar</name>
      <uri>https://stocksharp.ru/users/6089/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день. Если верить &lt;a href="http://www.codeproject.com/KB/cs/WeakEvents.aspx" rel="nofollow" target="_blank"&gt;http://www.codeproject.com/KB/cs/WeakEvents.aspx&lt;/a&gt;, кот. ссылается на Ecma cпецификацию, то для обеспечения потокобезопасности делегатов необходимо еще и локирование:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
EventHandler eh;
lock (this) { eh = MyEvent; }
if (eh != null) eh(this, EventArgs.Empty);

&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7975/</id>
    <title type="text">Mikhail Sukhov: Подниму топик парочкой советов: internal на методы, свойста и поля (но не типа) в C#...</title>
    <published>2011-05-08T10:54:09Z</published>
    <updated>2011-05-08T10:54:09Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.ru/users/6114/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7971)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Подниму топик парочкой советов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;ol start="2"&gt;
&lt;li&gt;internal на методы, свойста и поля (но не типа) в C# признак плохого дизайна. Говорит о том, что приосходит размытость границ логики.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;ol start="3"&gt;
&lt;li&gt;ODE0� Плох тем, что не важно, есть необходимый уровень трассировки или нет, строчка будет собираться всегда. Если такая конструкция встречается в коде, который вызывается часто, может снизить производительность.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Сделал криво, знаю.  Уже думал над тем, чтобы переделать + поменять internal на public.  В релиз не будет попадать вообще: выделю в отдельный метод с аттрибутом [Conditional(&amp;quot;DEBUG&amp;quot;)]&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/7971/</id>
    <title type="text">Подниму топик парочкой советов: internal на методы, свойста и поля (но не типа) в C# признак плохого...</title>
    <published>2011-05-07T21:42:54Z</published>
    <updated>2011-05-07T21:43:21Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Подниму топик парочкой советов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;internal на методы, свойста и поля (но не типа) в C# признак плохого дизайна. Говорит о том, что приосходит размытость границ логики.&lt;/li&gt;
&lt;li&gt;ODE0� Плох тем, что не важно, есть необходимый уровень трассировки или нет, строчка будет собираться всегда. Если такая конструкция встречается в коде, который вызывается часто, может снизить производительность.&lt;/li&gt;
&lt;li&gt;Любите readonly. Тоесть, когда создаете поля, сразу их делайте readonly. Снять атрибут можно всегда. Но он предотвратит от нежелательной логики перетирания значения.&lt;/li&gt;
&lt;li&gt;Два кода абсолютно эквивалентны:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;public class RootClass
{
  private class NestedClass
  {
     internal int Prop { get; set; }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;public class RootClass
{
  private class NestedClass
  {
     public int Prop { get; set; }
  }
}
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/6865/</id>
    <title type="text">int и Int32 - это алиасы. так же для bool и Boolean и т.д. Выражение вида: if (type == typeof(bool) ...</title>
    <published>2011-03-18T14:54:25Z</published>
    <updated>2011-03-18T14:54:25Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;int и Int32 - это алиасы. так же для bool и Boolean и т.д. Выражение вида:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if (type == typeof(bool) || type == typeof(Boolean))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;эквивалентно:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if (type == typeof(bool))
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5655/</id>
    <title type="text">if (MyEvent != null) MyEvent(); Проверка на null - это правильно. Но на следующей строчке MyEvent мо...</title>
    <published>2011-01-30T16:37:23Z</published>
    <updated>2011-01-30T16:37:23Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;pre&gt;&lt;code&gt;if (MyEvent != null)
	MyEvent();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Проверка на null - это правильно. Но на следующей строчке MyEvent может стать null (в другом потоке произошла отписка от события) и будет NullReferenceException. Решается через доп переменную:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var evt = MyEvent;
if (evt != null)
	evt();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Если не создавать собственных делегатов (видимо равнение идет на Плазу, где они создаются автоматически, а не потому что так правильно), то запись будет короче:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;MyEvent.SafeInvoke();
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5574/</id>
    <title type="text">_dataStream.StreamLifeNumChanged += new IP2DataStreamEvents_StreamLifeNumChangedEventHandler(OnStrea...</title>
    <published>2011-01-21T17:58:16Z</published>
    <updated>2011-01-21T17:58:16Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;pre&gt;&lt;code&gt;_dataStream.StreamLifeNumChanged += new IP2DataStreamEvents_StreamLifeNumChangedEventHandler(OnStreamLifeNumChanged);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;можно писать короче:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v_dataStream.StreamLifeNumChanged += OnStreamLifeNumChanged;
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5572/</id>
    <title type="text">Еще список того, что может пригодиться: ODE0� можно писать короче: var myNumber = myString.To(); ODE...</title>
    <published>2011-01-21T17:05:25Z</published>
    <updated>2011-01-21T17:05:25Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Еще список того, что может пригодиться:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ODE0�
можно писать короче:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;var myNumber = myString.To&amp;lt;int&amp;gt;();
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start="2"&gt;
&lt;li&gt;ODE2�
можно писать короче:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;if (arg.IsEmpty())
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5571/</id>
    <title type="text">aspirant: Только что закоммитил исправленный файл с классом ConfigParser. Идея такова: это базовый к...</title>
    <published>2011-01-21T17:01:40Z</published>
    <updated>2011-01-21T17:01:40Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5552)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;
Только что закоммитил исправленный файл с классом ConfigParser.  Идея такова: это базовый класс, который умеет парсить конфиг-файлы в формате Плазы.  Для каждого конфиг-файла создается класс-наследник, который в своем конструкторе заполняет массив SectionNames списком возможных ключей для этого файла.  Пока я только создал класс ClientRouterConfigParser, который настраивает главный конфиг-файл роутера Плазы client_router.ini.  Я пока не разобрался, нужно ли будет настраивать другие конфиги.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Это хорошо. Только зря вы убрали метод FindSection. Вообще лучше по максимуму переменные делать private и доступ к ним или через методы или через свойства. Лучше через методы, чтобы базовый класс делал базовую работу, а не просто отдавал свое состояние дочерним.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5552/</id>
    <title type="text">aspirant: Mikhail Sukhov: Тут не столько дело в перехвате и в Contains, сколько в сложности конструк...</title>
    <published>2011-01-21T07:02:15Z</published>
    <updated>2011-01-21T07:02:15Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.ru/users/6114/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5544)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5541)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Тут не столько дело в перехвате и в Contains, сколько в сложности конструкции ```
_sections[_sectionNames.IndexOf(sectionName)];&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; &amp;gt; Еще раз посмотрел. А почем бы сразу было не сделать Dictionary?
&amp;gt; 
&amp;gt; Вы правы: что я действительно здесь намудрил.  Сегодня сведу все в Dictionary.

Только что закоммитил исправленный файл с классом ConfigParser.  Идея такова: это базовый класс, который умеет парсить конфиг-файлы в формате Плазы.  Для каждого конфиг-файла создается класс-наследник, который в своем конструкторе заполняет массив SectionNames списком возможных ключей для этого файла.  Пока я только создал класс ClientRouterConfigParser, который настраивает главный конфиг-файл роутера Плазы client_router.ini.  Я пока не разобрался, нужно ли будет настраивать другие конфиги.
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5549/</id>
    <title type="text">aspirant: protected может использоваться только классами-наследниками, ну и самим классом тоже. Снар...</title>
    <published>2011-01-20T20:37:49Z</published>
    <updated>2011-01-20T20:37:49Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5544)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;
protected может использоваться только классами-наследниками, ну и самим классом тоже.  Снаружи он не виден.  Я имел в виду, что у меня есть класс ConfigParser.  От него наследует класс ClientRouterConfigParser, который и запрашивает информацию, передавая ключи.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Все ок. Я не увидел наследования. Но все равно, на будущее. Стиль именования протектем полей такой же как и паблик. Потому как смысл у них почти одинаковый.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5544/</id>
    <title type="text">Mikhail Sukhov: Тут не столько дело в перехвате и в Contains, сколько в сложности конструкции ``` _s...</title>
    <published>2011-01-20T10:52:14Z</published>
    <updated>2011-01-20T10:52:29Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.ru/users/6114/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5541)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Тут не столько дело в перехвате и в Contains, сколько в сложности конструкции ```
_sections[_sectionNames.IndexOf(sectionName)];&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; Еще раз посмотрел. А почем бы сразу было не сделать Dictionary?

Вы правы: что я действительно здесь намудрил.  Сегодня сведу все в Dictionary.

&amp;gt; **[Mikhail Sukhov](@message(5541)):**
&amp;gt; &amp;gt; **[aspirant](@message(5540)):**
&amp;gt; &amp;gt; Это кусок кода написан в **protected** методе, к которому обращается только мой плазовский код. Входящие значения ключей заранее известны и контролируются, т.е. вероятность ненахождения ключей мала.
&amp;gt; 
&amp;gt; Насчет модификаторов доступа. Есть подозрение что они неправильно используются. Можете привести их описание применительно к случаям использования - когда какой использовать?

protected может использоваться только классами-наследниками, ну и самим классом тоже.  Снаружи он не виден.  Я имел в виду, что у меня есть класс ConfigParser.  От него наследует класс ClientRouterConfigParser, который и запрашивает информацию, передавая ключи.
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5541/</id>
    <title type="text">aspirant: Большинство комментариев относится ко мне. Потому что другие пока код с логикой не писали....</title>
    <published>2011-01-20T07:37:42Z</published>
    <updated>2011-01-20T07:37:42Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5540)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;
Большинство комментариев относится ко мне.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Потому что другие пока код с логикой не писали. Вот сейчас начнут, и будут комментарии к другим.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5540)" rel="nofollow" target="_blank"&gt;aspirant&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5539)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
[*]```
_sections[_sectionNames.IndexOf(sectionName)];&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; &amp;gt; Лучше проверить через Contains.
&amp;gt; &amp;gt; [*]```
try
{
  ....
}
catch (KeyNotFoundException ex)
{
  throw new KeyNotFoundException(String.Format(&amp;quot;Неопознанный раздел конфиг-файла: {0}&amp;quot;, sectionName), ex);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Старайтесь минимизироваться перехват исключений. В том случае это решается через простую проверку на существование в коллекции.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вот мое мнение: давно на каком-то MS'ском блоге читал рекомендацию: если в большинстве случаев ключи будут находиться, лучше сразу возвращать значение через метод this[TKey key] и перехватывать неопознанные ключи через исключение.  Если вероятность исключения велика, лучше это делать через метод Contains.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Тут не столько дело в перехвате и в Contains, сколько в сложности конструкции ```
_sections[_sectionNames.IndexOf(sectionName)];&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Еще раз посмотрел. А почем бы сразу было не сделать Dictionary?

&amp;gt; **[aspirant](@message(5540)):**
&amp;gt; Это кусок кода написан в **protected** методе, к которому обращается только мой плазовский код. Входящие значения ключей заранее известны и контролируются, т.е. вероятность ненахождения ключей мала.

Насчет модификаторов доступа. Есть подозрение что они неправильно используются. Можете привести их описание применительно к случаям использования - когда какой использовать?
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5540/</id>
    <title type="text">Mikhail Sukhov: [*]``` _sections[_sectionNames.IndexOf(sectionName)]; &amp;gt; Лучше проверить через Contai...</title>
    <published>2011-01-20T06:41:22Z</published>
    <updated>2011-01-20T06:41:22Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.ru/users/6114/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(5539)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
[*]```
_sections[_sectionNames.IndexOf(sectionName)];&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; Лучше проверить через Contains.
&amp;gt; [*]```
try
{
  ....
}
catch (KeyNotFoundException ex)
{
  throw new KeyNotFoundException(String.Format(&amp;quot;Неопознанный раздел конфиг-файла: {0}&amp;quot;, sectionName), ex);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Старайтесь минимизироваться перехват исключений. В том случае это решается через простую проверку на существование в коллекции.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Большинство комментариев относится ко мне.  Все поправил за исключением верхнего куска.  Вот мое мнение: давно на каком-то MS'ском блоге читал рекомендацию: если в большинстве случаев ключи будут находиться, лучше сразу возвращать значение через метод this[TKey key] и перехватывать неопознанные ключи через исключение.  Если вероятность исключения велика, лучше это делать через метод Contains.  Это кусок кода написан в protected методе, к которому обращается только мой плазовский код. Входящие значения ключей заранее известны и контролируются, т.е. вероятность ненахождения ключей мала.&lt;/p&gt;
&lt;p&gt;Михаил, за вами, как за менеджером проекта, последнее слово.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/5539/</id>
    <title type="text">Постоянно смотрю на изменяющийся код. Весь поток контролировать не могу, поэтому выбираю некоторые м...</title>
    <published>2011-01-19T23:06:07Z</published>
    <updated>2011-01-19T23:06:07Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Постоянно смотрю на изменяющийся код. Весь поток контролировать не могу, поэтому выбираю некоторые места по принципу &lt;em&gt;Медведь на рыбалке в период нереста&lt;/em&gt;. Далее, привожу что увидел и как бы изменил. Рекомендую смотреть всем (даже если свой код не увидели), чтобы и самому учиться и не допустить в будущем:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ODE0�
Тут лучше использовать ключевое слово var&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;foreach (var pair in _sections)
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start="2"&gt;
&lt;li&gt;ODE2�
С помощью Ecng.Common пишется короче&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;pair.Value.Join(Environment.NewLine)
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start="3"&gt;
&lt;li&gt;ODE4�
Тут или область видимости должна быть private или название должно быть SectionName.&lt;/li&gt;
&lt;li&gt;ODE5�
С помощью Ecng.Common пишется короче&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;&amp;quot;{0}={1}&amp;quot;.Put(key, value)
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start="5"&gt;
&lt;li&gt;ODE7�
Лучше проверить через Contains.&lt;/li&gt;
&lt;li&gt;ODE8�
Старайтесь минимизироваться перехват исключений. В том случае это решается через простую проверку на существование в коллекции.&lt;/li&gt;
&lt;li&gt;ODE9�
Я бы заменил на ArgumentException. Он как то более осмысленный.&lt;/li&gt;
&lt;li&gt;Не пишите Decimal, Int64, String или Single. Понятно, что это межъязыковое название. Но лучше использовать то, что родное для C#.&lt;/li&gt;
&lt;li&gt;ODE10�
Стиль именования как в Win32 API. Последний умер де факто много лет назад, наследие его живет и по сей день.[biggrin]&lt;/li&gt;
&lt;li&gt;Добавляйте xml комментарии к самим классам, а не только его членам (видел в некоторых местах через // что есть совсем не то). И не забывайте про русский язык. В конце предложения ставится точка.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:36pt"&gt;&lt;span style="color:red"&gt;Пользуйтесь R#&lt;/span&gt;&lt;/span&gt;. Он показывает допущенные ошибки и предупреждает заранее о неправильном коде.&lt;/li&gt;
&lt;/ol&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>