- 1
- 2
- 3
public override string GetMobileBody() {
return System.Text.Encoding.UTF8.GetString(new Terrasoft.Common.CompressionUtilities().UnZip(new byte[] { 31,139,8, /*... over 9000 bytes ...*/,36,59,0,0 }));
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+136
public override string GetMobileBody() {
return System.Text.Encoding.UTF8.GetString(new Terrasoft.Common.CompressionUtilities().UnZip(new byte[] { 31,139,8, /*... over 9000 bytes ...*/,36,59,0,0 }));
}
По долгу службы пришлось столкнуться с одной небезызвестной CRM отечественного производства.
Безумно интересен сакральный смысл такого кода.
+134
class ParametersArray
{
...
/// <summary>
/// Копирующей конструктор (создает копию коллекции)
/// </summary>
/// <param name="prs">Коллекция на основе, которой будет создаваться копия</param>
public ParametersArray(ParametersArray prs)
{
paParameters = new ArrayList();
for (int i = 0; i < prs.Count; i++)
{
Parameter p = new Parameter(prs[i]);
paParameters.Add(p);
}
}
...
#region Внутренние состояния
/// <summary>
/// Внутреннее поле - массив параметров
/// </summary>
private ArrayList paParameters;
/// <summary>
/// Внутреннее поле – идентификатор операции, к которой относятся параметры
/// </summary>
private string paOperationId = "";
#endregion
/// <summary>
/// Удаляет параметр из коллекции
/// </summary>
/// <param name="parameterId">Идентификатор параметра</param>
public void Delete(string parameterId)
{
ArrayList list = new ArrayList();
foreach (Parameter prt in paParameters)
{
if (prt.Id.Trim() != parameterId.Trim())
{
list.Add(prt);
}
}
paParameters = list;
}
}
}
...
/// <summary>
/// Класс для поиска и обработки шаблонов в параметрах операций
/// </summary>
public class Parser
{
...
#region Конструкторы
/// <summary>
/// Конструктор инициализирующей класс
/// </summary>
/// <param name="requestUserId">ID пользователя, который используется для обработки шаблона ##USER()</param>
public Parser(string requestUserId)
{
pParameters = null;
pUserId = requestUserId;
}
#endregion
#region Внешние методы
/// <summary>
/// Метод перебирает все параметры операции, ищет там шаблоны и заменяет их значениями
/// </summary>
/// <param name="opr">Операция</param>
/// <returns>Операция с обработанными шаблонами</returns>
public Operation Parse(Operation opr)
{
pParameters = new ParametersArray(opr.Parameters);
for (int i = 0; i < pParameters.Count; i++)
if (FindTemplate(pParameters[i]))
{
ReplaceTemplate(pParameters[i]);
//Удаляет параметр с ошибкой
if (pParameters[i].Value == "parse err")
pParameters.Delete(pParameters[i].Id);
}
opr.Parameters = new ParametersArray(pParameters);
return opr;
}
Внимание привлекает код в строках 81-95
В строке 81-82 мы создаём временную копию параметров операции opr во внутреннем поле класса Parser. Прекрасно. Ещё раз - в публичном в методе инициализируем внутреннее поле (Классный side effect - поле используется в других методах).
В строке 91 удаляет элемент из внутренней коллекции, пересоздавая коллекцию целиком, то есть требования к памяти временно удваиваются на выходе из метода Delete (до очистки памяти). В методе Delete. Да. Супер.
потом инициализируем вновь созданной коллекцией публичное поле Parameters во входящем параметре opr метода Delete.
P.S.: Диагноз - хроническая форма неизлечимой Java. Во первых, автор этих строк искренне думает, что в природе ничего, кроме коллекции ArrayList, не существует. Во вторых, для удаления элемента коллекции мы пересоздаём всю коллекцию целиком, то есть видимо искренне полагая, что коллекция ArrayList - immutable, как и все поля класса Parser (типа ParametersArray) равно как и поле класса ParametersArray (типа ArrayList). Занавес.
Говнокодище.
+1
int i=1;
Console.WriteLine((i+null)==null); //True
Console.WriteLine(1+null); //1
Console.WriteLine(null+1); //1
Console.WriteLine((1+null).GetType()); //System.Int32
http://ideone.com/LomfRC
+133
[DataContract]
class outColumnsList
{
...
[DataMember]
public decimal? FK_ID_OBJECT { get; set; }
...
[DataMember]
public decimal? IS_PK { get; set; }
[DataMember]
public decimal? IS_EDIT { get; set; }
..
}
....
List<outColumnsList> l = new List<outColumnsList>();
while (r.Read())
{
outColumnsList l1 = new outColumnsList();
if (r.GetOracleValue(0).ToString()!="null")
l1.ID_OBJECT = Convert.ToDecimal(r.GetOracleValue(0).ToString());
l1.NM_DISPLAY = r.GetOracleValue(1).ToString();
l1.NM_SOURCE = r.GetOracleValue(2).ToString();
if (r.GetOracleValue(3).ToString() != "null")
l1.DISPLAY_SIZE = Convert.ToDecimal(r.GetOracleValue(3).ToString());
if (r.GetOracleValue(4).ToString() != "null")
l1.FK_ID_OBJECT = Convert.ToDecimal(r.GetOracleValue(4).ToString());
if (r.GetOracleValue(5).ToString() != "null")
l1.ORDER_DISPLAY = Convert.ToDecimal(r.GetOracleValue(5).ToString());
if (r.GetOracleValue(6).ToString() != "null")
l1.IS_EDIT = Convert.ToDecimal(r.GetOracleValue(6).ToString());
if (r.GetOracleValue(7).ToString() != "null")
l1.IS_PK = Convert.ToDecimal(r.GetOracleValue(7).ToString());
l1.FK_FIELD = r.GetOracleValue(8).ToString();
l1.NM_SOURCE_FK = r.GetOracleValue(10).ToString();
l.Add(l1);
}
это потрясающе. в качестве идентификатора использовать дробные числа... хорошо хоть не с плавающей запятой.
а так же, их же, для булевых....
а то, как они из базы читались, так это вообще сказка.
все ToString(), и все ConvertToDecimal... и проверка, на null еще тоже на уровне. про IsDBNull явно не слышал ничего
+141
/// <summary>
/// Массив весов для генерации КС длиной в 60 символов
/// </summary>
private static int[] weightsArray = new int[]
{ 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1, 7, 3, 1};
Цикл? Нееее, надёжнее ведь руками забить!
+142
string.Format(
"{0}{3}{1}{4}{2}",
MrzRfid.Split(';')[0],
MrzRfid.Split(';')[1],
MrzRfid.Split(';')[2],
Environment.NewLine,
Environment.NewLine);
Есть строка, которая состоит из 3х логических частей, разделеных символом ';'.
Этот код разбивает эти 3 части по строкам
+137
//Перевести строку в JSON
#region ConvertToJson
public static string ConvertToJson(string str)
{
return str.Replace(@"/", string.Empty).Replace(@"~", string.Empty).Replace(@":", string.Empty).Replace(@"{", string.Empty).Replace(@"}", string.Empty).Replace("\"", string.Empty).Replace(",", string.Empty).Replace("\n", string.Empty);
}
#endregion
json сериализатор из строки в строку, написанный в одну строчку
+133
TopPassGridBox.ItemsSource = CollectionViewSource.GetDefaultView((from t in Edit_Curent_Pass.PassFieldList
where Edit_Curent_Pass.PassFieldList.IndexOf(t) == 0 || Edit_Curent_Pass.PassFieldList.IndexOf(t) == 1 || Edit_Curent_Pass.PassFieldList.IndexOf(t) == 2
select t).ToList());
Я так и не понял, что хотели этим сказать...
+131
Dictionary<string, string> Users = new Dictionary<string, string>();
//somecode
foreach (string key in Users.Keys)
{
string str = Users[key];
m_LookUpProjectSupervisorFilter.Text = str;
m_LookUpProjectSupervisorFilter.Value = key;
break;
}
Такое часто в рабочем проекте.
+132
...
var word = frame as Word;
var _game = game;
int couner = 2;
game.SaveToParse(null);
// fire after save assync
game.GetParseInstance().FireWhenReadyAsync(() =>
{
// spend used iap
if (word != null && word.CustomWordUsed)
{
SpendCustomPhraseByued();
}
// add game to server
ParseController.Instance.AddNewGame(_game, _game.IsGameWasContinued() || _game.isGameNew, (error) =>
{
if (!string.IsNullOrEmpty(error))
{
Debug.LogError("GameController. Error while FinishThatGame: " + error);
}
couner--;
if (couner == 0 && onDone != null)
{
CoroutineProcess.Executor.ExecuteInMainThread(() =>
{
onDone();
});
}
});
});
// remove this game from list
RemoveGameFromGamesList(_game);
// increment games count
if (!frameContains && _game.gameOwner == parseUser)
{
parseUser.IncrementGamesCount();
}
// save to gallery
GalleryController.Instance.AddGameToGalery(_game, () =>
{
couner--;
if (couner == 0 && onDone != null)
{
onDone();
}
});
// finish started game
game = null;
Потокобезопасность, замыкания, английский, мьютексы не учи. Код пиши.
ps. проверка на "couner" не корректно выполнялась, надо было добавить критическую секцию.