Search
Write a publication
Pull to refresh
7
0
Андрей @Dubor

User

Send message

Миникостыли: склеиваем строку из фрагментов

Reading time3 min
Views806
Многим, наверно, знакома задачка, которую часто решают на скорую руку: добавить в строку фрагмент, если выполнено очередное условие.

Типичный кусок кода (немного надуманный пример, но все же):
void SomeFunc(string arg1, string arg2, string arg3)
{
  string msg = "";
  if (arg1 == null) msg += "ARG1 ";
  if (arg2 == null) msg += "ARG2 ";
  if (arg3 == null) msg += "ARG3 ";
  if (msg != "") throw new ArgumentNullException(msg);
  //...
}

На выходе, если все аргументы нулевые, получим строку "ARG1 ARG2 ARG3 ".
А если мы захотим "ARG1, ARG2, ARG3"? Или даже "ARG1, ARG2 and ARG3"?
Читать дальше →

«Множества» в C#

Reading time3 min
Views14K
Снова пишу про то, что, в общем-то, известно =) Но если где-то нужно передать в качестве аргумента функции несколько флагов, то данный способ можно использовать. Множеств (UPD: не как классов в библиотеке .Net, а как встроенной в синтаксис языка конструкции) в C# нет. Но зато есть атрибут [FlagsAttribute] для перечислений (т.е. для enum'ов):
[Flags]<br>enum Magic<br>{<br>  None = 0,<br><br>  Fire = 1, //огонь<br>  Air  = 2, //воздух<br>  Water = 4, //вода<br>  Earth = 8, //земля<br><br>  All  = Fire | Air | Water | Earth<br>}<br><br>* This source code was highlighted with Source Code Highlighter.
Читать дальше →

О бедном Dispose замолвите слово (часть 2)

Reading time4 min
Views3.7K
После опубликования предыдущей моей записи о Dispose, в обсуждении всплыло несколько острых вопросов, которые потребовали отдельного рассмотрения.

Если коротко, то они сводятся к «зачем так сложно?» и «как правильно должны освобождать свою память потомки?»

Читать дальше →

О бедном Dispose замолвите слово

Reading time3 min
Views3.5K
Немного про освобождение ресурсов в .Net.

предупреждение: текст ниже — просто пересказ своими словами давно известной информации, которая есть в сети на русском и английском языках.

Что делать, когда хочется освободить unmanaged ресурсы в .Net? Можно поместить код освобождения ресурсов в секцию finally и это будет самый простой способ. Не очень изящный, но зато гарантированно сработает и без всяких подводных камней:
DBConnection conn = new DBConnection();
try
{
 conn.Open();
 //...
}
finally
{
 conn.Close();
}


* This source code was highlighted with Source Code Highlighter.

Усложним задачу. Мы написали библиотечный класс, который работает с unmanaged ресурсами. По закону подлости (или больших чисел — как вам удобнее), пользоваться им, кроме гуру, будут еще и говнокодеры. Которые спокойно забудут вызвать метод для освобождения unmanaged ресурсов. А потом будут плеваться на криво написанную ВАМИ библиотеку.

А значит хочется написать свой класс таким образом, чтобы метод, освобождающий ресурсы (уже не важно — managed они или unmanaged) был вызван сборщиком мусора автоматически в том случае, если пользователь забыл вызвать его сам.

Читать дальше →

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity