locked
Подскажите есть ли в .Net возможность создния типизированной коллекции фиксированной длины? RRS feed

  • Вопрос

  • Хотелось бы создать коллекцию с предопределенным числом элементов, размер, которой в дальнейшем нельзя было бы изменить. Пробовал вот так, но при изменение коллекции _list, изменяется и коллекция _read

    Dim _list As New List(Of Single)(2)
    Dim _read As New ObjectModel.ReadOnlyCollection(Of Single)(_list)
    
    _list.Add(1.0F)
    _list.Add(2.0F)
    _list.Add(3.0F)

    12 сентября 2016 г. 9:06

Ответы

  • А что мешает использовать массив?

    Dim numbers = New Single() {1, 2, 3}


    This posting is provided "AS IS" with no warranties, and confers no rights.

    12 сентября 2016 г. 12:44
    Модератор

Все ответы

  • _list.ToArray() не подходит? как раз создает копию массив кот. не будет меняться при изменении исходной коллекции 
    12 сентября 2016 г. 11:07
  • мне нужен класс, при создании экземпляра, которого я мог бы указать, какое количество элементом мне нужно, и чтобы в дальнейшем нельзя было это изменить.
    12 сентября 2016 г. 11:13
  • Напишите собственный. Имплементируйте к примеру интерфейс IList<>. Определите собственую логику добавления и удаления объектов.
    12 сентября 2016 г. 11:41
  • Еще такой вопрос, вот нашел, что класс ArrayList имеет метод FixedSize, который может получать в качестве параметра или экземпляр ArrayList или IList, но при передаче в метод экземпляра типа List(Of Single)
    Dim _list As New List(Of Single)(2)
    Возникает исключение: "Объект типа "FixedSizeList" не может быть преобразован в тип "System.Collections.ArrayList", почему? Если List(Of Single) реализует интерфейс IList. Я вообще не нашел существования класса FixedSizeList в .Net.
    12 сентября 2016 г. 11:49
  • Мне не нужно ничего добавлять и удалять! Мне нужно чтобы экземпляр был фиксированной длины! В .Net существует уйма классов, и я спрашивал, возможно кто-то знает, класс подходящий моим требованиям.
    12 сентября 2016 г. 11:56
  • "нашел, что класс ArrayList имеет метод FixedSize, который может получать в качестве параметра или экземпляр ArrayList или IList" - я смотрю в документацию и вижу, что он принимает только ArrayList. Преобразуйте ваш List в ArrayList и будет вам счастье


    • Изменено VadimTagil 12 сентября 2016 г. 12:10 опечатка
    12 сентября 2016 г. 12:10
  • наверно мы смотрим в разную документацию, вот ссылка

    https://msdn.microsoft.com/ru-ru/library/f61x7hew(v=vs.110).aspx

    я понял свою ошибку с методом FixedSize, он получает IList и возвращает IList.
    12 сентября 2016 г. 12:17
  • А что мешает использовать массив?

    Dim numbers = New Single() {1, 2, 3}


    This posting is provided "AS IS" with no warranties, and confers no rights.

    12 сентября 2016 г. 12:44
    Модератор
  • ничего, просто хотелось использовать коллекцию.
    12 сентября 2016 г. 13:14
  • Массив и есть коллекция, реализует ICollection и IList.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа Naomi N 13 сентября 2016 г. 11:22
    • Отменено предложение в качестве ответа SergejS 13 сентября 2016 г. 11:24
    12 сентября 2016 г. 15:16
    Модератор
  • FixedSize созданный из List будет иметь ту же "проблему", что и ReadOnlyCollection в первом сообщении. Изменение первоначальной коллекции будет отражаться в FixedSize-коллекции. Надо создавать FixedSize коллекцию на основе массива (_list.ToArray()), чтобы получить то что вы хотите
    13 сентября 2016 г. 3:10