Информация об изменениях

Сообщение 2IT: Предложения по свежим сбросам от 04.05.2016 8:00

Изменено 04.05.2016 8:22 Sinix

Привет

Мелкие вопросы, как всегда, воспринимать как предложения, а не "нужно сделать вот так"


1. Objects.Random нужно или выпилить или хранить в ThreadLocal, он не потокобезопасный

2. Можно в пару предложений — зачем нам нужен exception.GetText()?
В смысле, чем он настолько крут, что окупает необходимость поддерживать и обычный формат (.ToString()) и новый?
Если нужен — надо поправить косяк: в конце текста всегда пустая строка.


3. EqualityComparer.GetHashCode():
генерится
{
    var num = 321595348; // рандом
    num = num * -1521134295 + EqualityComparer<string>.Default.GetHashCode(p.Prop2);
    num = num * -1521134295 + EqualityComparer<int>.Default.GetHashCode(p.Field1);
    return num;
}


3.1. Надо бы использовать HashCode.Combine() — там используется стандартный алгоритм из Tuple.
3.2. После 3.1. рандомный seed можно убрать, он на распределение особо не влияет
3.3. Было бы круто допилить comparer под реальные сценарии — в 99.99% случаев надо сравнивать по определённым полям. Ну, т.е. нужен builder с синтаксисом аля
            var comparerBuilder = new EqualityComparerBuilder<SomeType>
            {
                { t => t.PropertyA }, 
                { t => t.PropertyB.PropertyC }, 
                { t => t.PropertyC.GetSomeValue() }
            };
            var comparer = comparerBuilder.ToComparer();

И, возможно, закинуть методы для компарера в Operators<T>, сам код с генерацией — в OperatorsFactory<T> — но это только как всё устаканится.

3.4. С учётом 3.3. А не замахнуться ли по аналогии ещё и на IComparer<T>?


4. AggregateOrDefault — надо бы докинуть перегрузки с TAccumulate, как в стандартном Aggregate().

5. Было бы круто привести код в соответствие с общими соглашениями по форматированию.
Если есть решарпер — он должен подсветить все проблемные места. Если нет — я займусь, но когда время будет — хз.

В остальном — круто, отдельное спасибо за TypeAccessor
2IT: Предложения по свежим сбросам
Привет

Мелкие вопросы, как всегда, воспринимать как предложения, а не "нужно сделать вот так"


1. Objects.Random нужно или выпилить или хранить в ThreadLocal, он не потокобезопасный

2. Можно в пару предложений — зачем нам нужен exception.GetText()?
Вопрос отпал, rameel ниже ответил.
В exception.GetText() есть мелкий косяк: в конце текста всегда пустая строка.


3. EqualityComparer.GetHashCode():
генерится
{
    var num = 321595348; // рандом
    num = num * -1521134295 + EqualityComparer<string>.Default.GetHashCode(p.Prop2);
    num = num * -1521134295 + EqualityComparer<int>.Default.GetHashCode(p.Field1);
    return num;
}


3.1. Надо бы использовать HashCode.Combine() — там используется стандартный алгоритм из Tuple.
3.2. После 3.1. рандомный seed можно убрать, он на распределение особо не влияет
3.3. Было бы круто допилить comparer под реальные сценарии — в 99.99% случаев надо сравнивать по определённым полям. Ну, т.е. нужен builder с синтаксисом аля
            var comparerBuilder = new EqualityComparerBuilder<SomeType>
            {
                { t => t.PropertyA }, 
                { t => t.PropertyB.PropertyC }, 
                { t => t.PropertyC.GetSomeValue() }
            };
            var comparer = comparerBuilder.ToComparer();

И, возможно, закинуть методы для компарера в Operators<T>, сам код с генерацией — в OperatorsFactory<T> — но это только как всё устаканится.

3.4. С учётом 3.3. А не замахнуться ли по аналогии ещё и на IComparer<T>?


4. AggregateOrDefault — надо бы докинуть перегрузки с TAccumulate, как в стандартном Aggregate().

5. Было бы круто привести код в соответствие с общими соглашениями по форматированию.
Если есть решарпер — он должен подсветить все проблемные места. Если нет — я займусь, но когда время будет — хз.

Уже сделано AVK, спасибо!

В остальном — круто, отдельное спасибо за TypeAccessor