diff --git a/Orm/Xtensive.Orm/Collections/FlagCollection.cs b/Orm/Xtensive.Orm/Collections/FlagCollection.cs index ca7ee8a0d..e73469b8f 100644 --- a/Orm/Xtensive.Orm/Collections/FlagCollection.cs +++ b/Orm/Xtensive.Orm/Collections/FlagCollection.cs @@ -232,15 +232,12 @@ bool ICollection>.Contains(KeyValuePair i /// public IEnumerator> GetEnumerator() { - for (int i = 0; i < keys.Count; i++) + for (int i = 0, count = keys.Count; i < count; i++) yield return new KeyValuePair(keys[i], Converter.ConvertBackward(flags[1 << i])); } /// - IEnumerator IEnumerable.GetEnumerator() - { - return ((IEnumerable>)this).GetEnumerator(); - } + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); #endregion diff --git a/Orm/Xtensive.Orm/Orm/Rse/RecordSetHeader.cs b/Orm/Xtensive.Orm/Orm/Rse/RecordSetHeader.cs index fecfb9a22..5b9ce0536 100644 --- a/Orm/Xtensive.Orm/Orm/Rse/RecordSetHeader.cs +++ b/Orm/Xtensive.Orm/Orm/Rse/RecordSetHeader.cs @@ -4,7 +4,6 @@ // Created by: Alexey Kochetov // Created: 2007.09.13 -using System.Buffers; using Xtensive.Collections; using Xtensive.Core; using Xtensive.Orm.Model; @@ -20,6 +19,8 @@ namespace Xtensive.Orm.Rse [Serializable] public sealed class RecordSetHeader { + private static readonly DirectionCollection EmptyOrder = new(); + private TupleDescriptor orderTupleDescriptor; /// @@ -344,8 +345,17 @@ public RecordSetHeader( ColumnGroups = columnGroups ?? []; orderTupleDescriptor = orderKeyDescriptor ?? TupleDescriptor.Empty; - Order = order ?? new DirectionCollection(); - Order.Lock(true); + if (order != null) { + (Order = order).Lock(); + } + else { + Order = EmptyOrder; + } + } + + static RecordSetHeader() + { + EmptyOrder.Lock(); } } }