Один из способов найти последнюю версию строки - использовать StructuralComparer
var r1 = new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00};
var r2 = new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xFF};
bool r1_is_newer = StructuralComparisons.StructuralComparer.Compare(r1, r2) > 0;
Преимущество структурных сравнений состоит в том, что они автоматически обрабатывают NULL
s
Относительно использования BitConverter
.Если вышеупомянутые байтовые массивы были преобразованы в UInt64
с использованием BitConverter
, в результате вы получили бы очень большие числа, и сравнение не имеет смысла (поскольку изменение строки изменяется на единицу, преобразованное число uint64 изменяетсяпримерно на 2 ^ 56)
Если вы хотите наложить немного LINQ поверх него, чтобы сделать его более медленным, вы можете использовать
bool r1_is_newer =
Enumerable.Zip(r1, r2, (b1, b2) => new { b1, b2 })
.SkipWhile(item => item.b1 == item.b2)
.Take(1).Any(item => item.b1 > item.b2);