Рассматривают У меня есть следующий код:Пустой массив при использовании NextBytes
public sealed class SimpleRandomProvider : IRandomProvider
{
private static readonly Lazy<Random> RandomHolder = new Lazy<Random>(() => new Random());
public void NextBytes(byte[] buffer)
{
RandomHolder.Value.NextBytes(buffer);
}
}
К сожалению, каждый раз, когда я называю NextBytes
в System.Random
buffer
заполняется пустыми байтами:
Что странно , сначала X
(около 100) звонков NextBytes
работает просто отлично.
Что происходит? Может быть, это ошибка в .Net Core?
Код, который вызывает генерации:
do
{
randomProvider.NextBytes(bytes);
bytes[bytes.Length - 1] &= 0x7F;
result = new BigInteger(bytes);
} while (result >= maxExclusive || result.Equals(BigInteger.One) ||
result.Equals(BigInteger.Zero));
Он используется для генерации BigInteger
ниже указанных maxExclusive
. Этот сниппета не называется 100-200 раз, прежде чем он начинает генерировать буфер, заполненный нулями (во время модульного теста).
Edit:
вы можете скачать мой проект: https://github.com/pwasiewicz/big-prime-number - затем запустить тест - он должен разрушаться из-за InvalidOperationException, выбрасываемого только тогда, когда буфер пуст.
Когда тесты запускаются один за другим. Но запуск их всех (Run All in VS) вызывает исключение.
Попробуйте показывать содержимое этого массива каким-либо другим способом, как вручную преобразовать его в строку или что-то и проверки этого. У визуализатора отладчика есть некоторые ошибки, это может быть один из них. –
К сожалению - нет. Я проверил это - я попытался преобразовать его в строку и проверить его с помощью LINQ: 'var isEmpty = buffer.All (v => v == 0);'. Ед. Тесты не проходят - я написал тест, заполняющий буфер, пока он не содержит ненулевой номер. – pwas
Ваш код отлично работает для меня –