Бросок CopyOnWriteArrayList CurrentModificationException

В.NET (включая C#), Вы имеете BitConverter, который принимает много типов, предоставляя доступ к необработанному двоичному файлу; получить шестнадцатеричное число, ToString("x2") - наиболее распространенная опция (возможно, обернутый в служебный метод):

    byte[] raw = BitConverter.GetBytes(123.45);
    StringBuilder sb = new StringBuilder(raw.Length * 2);
    foreach (byte b in raw)
    {
        sb.Append(b.ToString("x2"));
    }
    Console.WriteLine(sb);

Странно, базируйтесь 64, имеет преобразование с 1 строкой (Convert.ToBase64String), но основа 16 прилагает больше усилий. Если Вы не ссылаетесь на Microsoft. VisualBasic, в этом случае:

long tmp = BitConverter.DoubleToInt64Bits(123.45);
string hex = Microsoft.VisualBasic.Conversion.Hex(tmp);
15
задан BlairHippo 6 October 2009 в 20:52
поделиться

2 ответа

CopyOnWriteArrayList.subList выбрасывает ConcurrentModificationExceptions, если содержащий список изменяется из под ним:

public class ListTest {

  private static List<int[]> intList;

  public static void main (String[] args) {
    CopyOnWriteArrayList<Integer> cowal = new CopyOnWriteArrayList<Integer>();
    cowal.add(1);
    cowal.add(2);
    cowal.add(3);

    List<Integer> sub = cowal.subList(1, 2);
    cowal.add(4);
    sub.get(0); //throws ConcurrentModificationException
  }
}
18
ответ дан 1 December 2019 в 04:09
поделиться

У Sbodd есть правильный ответ, но похоже, что использование CopyOnWriteArrayList вместо ArrayList - это всего лишь попытка замаскировать ошибку. Настоящая проблема - это попытка изменить базовый список во время итерации по нему. Вам нужно найти в коде, где вы обращаетесь к нему как таковому, и удалить такое использование или обойти его.

-1
ответ дан 1 December 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: