﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/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-05-06T13:31:50Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=1327" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/8392/</id>
    <title type="text">@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.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/8391/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;@esper, может выставишь у себя tab&amp;#39;ы (Tools \ Options \ Text Editor \ Tab \ Keep tabs)?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Сделал[smile] </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">@esper, может выставишь у себя tab&amp;#39;ы (Tools \ Options \ Text Editor \ Tab \ Keep tabs)?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/6089/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Добрый день. Если верить &lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAACAgYUiuylrmO29oHxzVnT5zpFvuonJUGuNjXw_d-fDRJv4EuG8_fYObWsGLKAgS6wnJ9FOXIkw6hZt0GAZFYkF" title="http://www.codeproject.com/KB/cs/WeakEvents.aspx"&gt;http://www.codeproject.com/KB/cs/WeakEvents.aspx&lt;/a&gt;, кот. ссылается на Ecma cпецификацию, то для обеспечения потокобезопасности делегатов необходимо еще и локирование:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;br /&gt;EventHandler eh;&lt;br /&gt;lock (this) { eh = MyEvent; }&lt;br /&gt;if (eh != null) eh(this, EventArgs.Empty);&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/7975/</id>
    <title type="text">Подниму топик парочкой советов: internal на методы, свойста и поля (но не типа) в C# признак плохого...</title>
    <published>2011-05-08T10:54:09Z</published>
    <updated>2011-05-08T10:54:09Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/7971/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Подниму топик парочкой советов:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; internal на методы, свойста и поля (но не типа) в C# признак плохого дизайна. Говорит о том, что приосходит размытость границ логики.&lt;br /&gt;&lt;li&gt; &lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;Trace.WriteLineIf(TracingLevel &amp;gt; 2, record.GetStrings().Join(&amp;quot;;&amp;quot;));&lt;/div&gt;&lt;/div&gt; Плох тем, что не важно, есть необходимый уровень трассировки или нет, строчка будет собираться всегда. Если такая конструкция встречается в коде, который вызывается часто, может снизить производительность.&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Сделал криво, знаю.  Уже думал над тем, чтобы переделать + поменять internal на public.  В релиз не будет попадать вообще: выделю в отдельный метод с аттрибутом [Conditional(&amp;quot;DEBUG&amp;quot;)] &lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Подниму топик парочкой советов:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; internal на методы, свойста и поля (но не типа) в C# признак плохого дизайна. Говорит о том, что приосходит размытость границ логики.&lt;br /&gt;&lt;li&gt; &lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;Trace.WriteLineIf(TracingLevel &amp;gt; 2, record.GetStrings().Join(&amp;quot;;&amp;quot;));&lt;/div&gt;&lt;/div&gt; Плох тем, что не важно, есть необходимый уровень трассировки или нет, строчка будет собираться всегда. Если такая конструкция встречается в коде, который вызывается часто, может снизить производительность.&lt;br /&gt;&lt;li&gt; Любите readonly. Тоесть, когда создаете поля, сразу их делайте readonly. Снять атрибут можно всегда. Но он предотвратит от нежелательной логики перетирания значения.&lt;br /&gt;&lt;li&gt; Два кода абсолютно эквивалентны:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;public class RootClass&lt;br /&gt;{&lt;br /&gt;  private class NestedClass&lt;br /&gt;  {&lt;br /&gt;     internal int Prop { get; set; }&lt;br /&gt;  }&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;public class RootClass&lt;br /&gt;{&lt;br /&gt;  private class NestedClass&lt;br /&gt;  {&lt;br /&gt;     public int Prop { get; set; }&lt;br /&gt;  }&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/ol&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">int и Int32 - это алиасы. так же для bool и Boolean и т.д. Выражение вида:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;if (type == typeof(bool) || type == typeof(Boolean))&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;эквивалентно:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;if (type == typeof(bool))&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;if (MyEvent != null)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;MyEvent();&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Проверка на null - это правильно. Но на следующей строчке MyEvent может стать null (в другом потоке произошла отписка от события) и будет NullReferenceException. Решается через доп переменную:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;var evt = MyEvent;&lt;br /&gt;if (evt != null)&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;evt();&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Если не создавать собственных делегатов (видимо равнение идет на Плазу, где они создаются автоматически, а не потому что так правильно), то запись будет короче:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;MyEvent.SafeInvoke();&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_dataStream.StreamLifeNumChanged += new IP2DataStreamEvents_StreamLifeNumChangedEventHandler(OnStreamLifeNumChanged);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;можно писать короче:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;v_dataStream.StreamLifeNumChanged += OnStreamLifeNumChanged;&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/5572/</id>
    <title type="text">Еще список того, что может пригодиться: var myNumber = Convert.ToInt32(myString); можно писать короч...</title>
    <published>2011-01-21T17:05:25Z</published>
    <updated>2011-01-21T17:05:25Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Еще список того, что может пригодиться:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;var myNumber = Convert.ToInt32(myString);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;можно писать короче:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;var myNumber = myString.To&amp;lt;int&amp;gt;();&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;if (string.IsNullOrEmpty(arg))&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;можно писать короче:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;if (arg.IsEmpty())&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/ol&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/5571/</id>
    <title type="text"> Только что закоммитил исправленный файл с классом ConfigParser. Идея такова: это базовый класс, кот...</title>
    <published>2011-01-21T17:01:40Z</published>
    <updated>2011-01-21T17:01:40Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/5552/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Только что закоммитил исправленный файл с классом ConfigParser.  Идея такова: это базовый класс, который умеет парсить конфиг-файлы в формате Плазы.  Для каждого конфиг-файла создается класс-наследник, который в своем конструкторе заполняет массив SectionNames списком возможных ключей для этого файла.  Пока я только создал класс ClientRouterConfigParser, который настраивает главный конфиг-файл роутера Плазы client_router.ini.  Я пока не разобрался, нужно ли будет настраивать другие конфиги.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Это хорошо. Только зря вы убрали метод FindSection. Вообще лучше по максимуму переменные делать private и доступ к ним или через методы или через свойства. Лучше через методы, чтобы базовый класс делал базовую работу, а не просто отдавал свое состояние дочерним.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/5552/</id>
    <title type="text"> Тут не столько дело в перехвате и в Contains, сколько в сложности конструкции _sections; Еще раз по...</title>
    <published>2011-01-21T07:02:15Z</published>
    <updated>2011-01-21T07:02:15Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/5544/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/5541/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;br /&gt;Тут не столько дело в перехвате и в Contains, сколько в сложности конструкции &lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_sections&amp;#91;_sectionNames.IndexOf(sectionName)&amp;#93;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Еще раз посмотрел. А почем бы сразу было не сделать Dictionary?&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вы правы: что я действительно здесь намудрил.  Сегодня сведу все в Dictionary.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Только что закоммитил исправленный файл с классом ConfigParser.  Идея такова: это базовый класс, который умеет парсить конфиг-файлы в формате Плазы.  Для каждого конфиг-файла создается класс-наследник, который в своем конструкторе заполняет массив SectionNames списком возможных ключей для этого файла.  Пока я только создал класс ClientRouterConfigParser, который настраивает главный конфиг-файл роутера Плазы client_router.ini.  Я пока не разобрался, нужно ли будет настраивать другие конфиги.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/5549/</id>
    <title type="text"> protected может использоваться только классами-наследниками, ну и самим классом тоже. Снаружи он не...</title>
    <published>2011-01-20T20:37:49Z</published>
    <updated>2011-01-20T20:37:49Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/5544/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;protected может использоваться только классами-наследниками, ну и самим классом тоже.  Снаружи он не виден.  Я имел в виду, что у меня есть класс ConfigParser.  От него наследует класс ClientRouterConfigParser, который и запрашивает информацию, передавая ключи.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Все ок. Я не увидел наследования. Но все равно, на будущее. Стиль именования протектем полей такой же как и паблик. Потому как смысл у них почти одинаковый.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/5544/</id>
    <title type="text"> Тут не столько дело в перехвате и в Contains, сколько в сложности конструкции _sections; Еще раз по...</title>
    <published>2011-01-20T10:52:14Z</published>
    <updated>2011-01-20T10:52:29Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/5541/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;br /&gt;Тут не столько дело в перехвате и в Contains, сколько в сложности конструкции &lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_sections&amp;#91;_sectionNames.IndexOf(sectionName)&amp;#93;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Еще раз посмотрел. А почем бы сразу было не сделать Dictionary?&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вы правы: что я действительно здесь намудрил.  Сегодня сведу все в Dictionary.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/5541/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/5540/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Это кусок кода написан в &lt;b&gt;protected&lt;/b&gt; методе, к которому обращается только мой плазовский код. Входящие значения ключей заранее известны и контролируются, т.е. вероятность ненахождения ключей мала.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Насчет модификаторов доступа. Есть подозрение что они неправильно используются. Можете привести их описание применительно к случаям использования - когда какой использовать?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;protected может использоваться только классами-наследниками, ну и самим классом тоже.  Снаружи он не виден.  Я имел в виду, что у меня есть класс ConfigParser.  От него наследует класс ClientRouterConfigParser, который и запрашивает информацию, передавая ключи.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/5541/</id>
    <title type="text"> Большинство комментариев относится ко мне. Потому что другие пока код с логикой не писали. Вот сейч...</title>
    <published>2011-01-20T07:37:42Z</published>
    <updated>2011-01-20T07:37:42Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/5540/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Большинство комментариев относится ко мне.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Потому что другие пока код с логикой не писали. Вот сейчас начнут, и будут комментарии к другим.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/5540/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/5539/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_sections&amp;#91;_sectionNames.IndexOf(sectionName)&amp;#93;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Лучше проверить через Contains.&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;try&lt;br /&gt;{&lt;br /&gt;  ....&lt;br /&gt;}&lt;br /&gt;catch (KeyNotFoundException ex)&lt;br /&gt;{&lt;br /&gt;  throw new KeyNotFoundException(String.Format(&amp;quot;Неопознанный раздел конфиг-файла: {0}&amp;quot;, sectionName), ex);&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Старайтесь минимизироваться перехват исключений. В том случае это решается через простую проверку на существование в коллекции.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вот мое мнение: давно на каком-то MS&amp;#39;ском блоге читал рекомендацию: если в большинстве случаев ключи будут находиться, лучше сразу возвращать значение через метод this[TKey key] и перехватывать неопознанные ключи через исключение.  Если вероятность исключения велика, лучше это делать через метод Contains.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Тут не столько дело в перехвате и в Contains, сколько в сложности конструкции &lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_sections&amp;#91;_sectionNames.IndexOf(sectionName)&amp;#93;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Еще раз посмотрел. А почем бы сразу было не сделать Dictionary?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;aspirant &lt;a href="https://stocksharp.com/posts/m/5540/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Это кусок кода написан в &lt;b&gt;protected&lt;/b&gt; методе, к которому обращается только мой плазовский код. Входящие значения ключей заранее известны и контролируются, т.е. вероятность ненахождения ключей мала.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Насчет модификаторов доступа. Есть подозрение что они неправильно используются. Можете привести их описание применительно к случаям использования - когда какой использовать?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/5540/</id>
    <title type="text"> _sections; Лучше проверить через Contains. try { .... } catch (KeyNotFoundException ex) { throw new...</title>
    <published>2011-01-20T06:41:22Z</published>
    <updated>2011-01-20T06:41:22Z</updated>
    <author>
      <name>aspirant</name>
      <uri>https://stocksharp.com/users/6114/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Mikhail Sukhov &lt;a href="https://stocksharp.com/posts/m/5539/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_sections&amp;#91;_sectionNames.IndexOf(sectionName)&amp;#93;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Лучше проверить через Contains.&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;try&lt;br /&gt;{&lt;br /&gt;  ....&lt;br /&gt;}&lt;br /&gt;catch (KeyNotFoundException ex)&lt;br /&gt;{&lt;br /&gt;  throw new KeyNotFoundException(String.Format(&amp;quot;Неопознанный раздел конфиг-файла: {0}&amp;quot;, sectionName), ex);&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Старайтесь минимизироваться перехват исключений. В том случае это решается через простую проверку на существование в коллекции.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Большинство комментариев относится ко мне.  Все поправил за исключением верхнего куска.  Вот мое мнение: давно на каком-то MS&amp;#39;ском блоге читал рекомендацию: если в большинстве случаев ключи будут находиться, лучше сразу возвращать значение через метод this[TKey key] и перехватывать неопознанные ключи через исключение.  Если вероятность исключения велика, лучше это делать через метод Contains.  Это кусок кода написан в protected методе, к которому обращается только мой плазовский код. Входящие значения ключей заранее известны и контролируются, т.е. вероятность ненахождения ключей мала.&lt;br /&gt;&lt;br /&gt;Михаил, за вами, как за менеджером проекта, последнее слово.&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Постоянно смотрю на изменяющийся код. Весь поток контролировать не могу, поэтому выбираю некоторые места по принципу &lt;em&gt;Медведь на рыбалке в период нереста&lt;/em&gt;. Далее, привожу что увидел и как бы изменил. Рекомендую смотреть всем (даже если свой код не увидели), чтобы и самому учиться и не допустить в будущем:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;foreach (KeyValuePair&amp;lt;int, List&amp;lt;string&amp;gt;&amp;gt; pair in _sections)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Тут лучше использовать ключевое слово var&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;foreach (var pair in _sections)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;String.Join(Environment.NewLine, pair.Value.ToArray())&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;С помощью Ecng.Common пишется короче&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;pair.Value.Join(Environment.NewLine)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;protected List&amp;lt;string&amp;gt; _sectionNames;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Тут или область видимости должна быть private или название должно быть SectionName.&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;String.Format(&amp;quot;{0}={1}&amp;quot;, key, value)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;С помощью Ecng.Common пишется короче&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&amp;quot;{0}={1}&amp;quot;.Put(key, value)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;_sections&amp;#91;_sectionNames.IndexOf(sectionName)&amp;#93;;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Лучше проверить через Contains.&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;try&lt;br /&gt;{&lt;br /&gt;  ....&lt;br /&gt;}&lt;br /&gt;catch (KeyNotFoundException ex)&lt;br /&gt;{&lt;br /&gt;  throw new KeyNotFoundException(String.Format(&amp;quot;Неопознанный раздел конфиг-файла: {0}&amp;quot;, sectionName), ex);&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Старайтесь минимизироваться перехват исключений. В том случае это решается через простую проверку на существование в коллекции.&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;throw new InvalidOperationException(String.Format(&amp;quot;Ключ {0} не найден&amp;quot;, key));&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Я бы заменил на ArgumentException. Он как то более осмысленный.&lt;br /&gt;&lt;li&gt;Не пишите Decimal, Int64, String или Single. Понятно, что это межъязыковое название. Но лучше использовать то, что родное для C#.&lt;br /&gt;&lt;li&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;public const int DEFAULT_PLAZA2_PORT = 4001;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Стиль именования как в Win32 API. Последний умер де факто много лет назад, наследие его живет и по сей день.[biggrin]&lt;br /&gt;&lt;li&gt;Добавляйте xml комментарии к самим классам, а не только его членам (видел в некоторых местах через // что есть совсем не то). И не забывайте про русский язык. В конце предложения ставится точка.&lt;br /&gt;&lt;li&gt;&lt;span style="font-size:140%"&gt;&lt;span style="color:red"&gt;Пользуйтесь R#&lt;/span&gt;&lt;/span&gt;. Он показывает допущенные ошибки и предупреждает заранее о неправильном коде.&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>