Модераторы: diadiavova, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как изменить значение в обьекте из Коллекции? я имею ввиду как это сделать красиво = ) 
V
    Опции темы
Exception
Дата 2.2.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Цитата(JaguarSmith @ 2.2.2006, 22:09 Найти цитируемый пост)

Вот!
Вспомнил на кой я в dbParameter SetValuse и RetValues сделал функциями:
Код

        Dim n As CU.SQL.dbParameter
        DefaultDataStructure = New CU.SQL.Parameters
        DefaultDataStructure.add(n.SetValues("indx", , True))
        DefaultDataStructure.add(n.SetValues("name"))
        DefaultDataStructure.add(n.SetValues("nick")) ' Login
        DefaultDataStructure.add(n.SetValues("password"))
        DefaultDataStructure.add(n.SetValues("BirthDate"))
        DefaultDataStructure.add(n.SetValues("Email1"))
        DefaultDataStructure.add(n.SetValues("Email2"))
        DefaultDataStructure.add(n.SetValues("icq"))
        DefaultDataStructure.add(n.SetValues("yahoo"))
        DefaultDataStructure.add(n.SetValues("userpic"))
        DefaultDataStructure.add(n.SetValues("userpic_class"))


М-да.
Для этого существуют конструкторы...
Я подправил код в предыдущем посте, а используется это так:
Код

        DefaultDataStructure = New CU.SQL.Parameters
        DefaultDataStructure.add(New CU.SQL.dbParameter("indx", , True))
        DefaultDataStructure.add(New CU.SQL.dbParameter("name"))
        DefaultDataStructure.add(New CU.SQL.dbParameter("nick"))
        DefaultDataStructure.add(New CU.SQL.dbParameter("password"))
        DefaultDataStructure.add(New CU.SQL.dbParameter("BirthDate"))
        DefaultDataStructure.add(New CU.SQL.dbParameter("Email1"))
        DefaultDataStructure.add(New CU.SQL.dbParameter("Email2"))
        DefaultDataStructure.add(New CU.SQL.dbParameter("icq"))
        DefaultDataStructure.add(New CU.SQL.dbParameter("yahoo"))
        DefaultDataStructure.add(New CU.SQL.dbParameter("userpic"))
        DefaultDataStructure.add(New CU.SQL.dbParameter("userpic_class"))

Добавлено @ 21:50
Цитата(JaguarSmith @ 2.2.2006, 22:09 Найти цитируемый пост)
Зы. Почимуто когда я нажимаю на кнопку которая Разворачивает прокручиваемый код у мну наглухо виснет ИЕ наверно вирус подцепил гдето...

Это баг форума. Скоро должны пофиксить.
PM   Вверх
JaguarSmith
Дата 2.2.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



ага!

А вот это:
Код

DefaultDataStructure.add(New CU.SQL.dbParameter("userpic"))

smile Не работает! ибо надо добавлять ещё Key
А что это такое и на кой он мне нужен? smile
Добавлено @ 23:16
А вот ещё - для мну важны функции SetItem и GetItem - которые соответственно устанавливают и возвращают элемент из коллекции в зависимости от его имени...
PM MAIL YIM   Вверх
JaguarSmith
Дата 2.2.2006, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



Вотъ!
Попробовал вот так:
Код

Public Class Parameters

        Inherits CollectionBase

        Public Sub New()
        End Sub
        Public Sub New(ByVal n As collection)
            merge(n)
        End Sub

        ' Работаем с стандартными параметрами коллекции:

        Default Public Property Item(ByVal index As Integer) As CU.SQL.dbParameter
            Get
                Return CType(List(index), CU.SQL.dbParameter)
            End Get
            Set(ByVal Value As CU.SQL.dbParameter)
                List(index) = Value
            End Set
        End Property

        Public Function Add(ByVal value As CU.SQL.dbParameter) As Integer
            Return List.Add(value)
        End Function 'Add

        Public Sub Remove(ByVal value As Integer)
            List.Remove(value)
        End Sub 'Remove

        Public Sub Insert(ByVal index As Integer, ByVal value As CU.SQL.dbParameter)
            List.Insert(index, value)
        End Sub 'Insert

        Public Function Contains(ByVal value As CU.SQL.dbParameter) As Boolean
            Return List.Contains(value)
        End Function 'Contains


        ' Новые методы
        ' Возвращает коллекцию параметров
        Public Function collection() As collection
            Return Me.collection
        End Function
        ' Создает из коллекции
        Public Sub FromCollection(ByVal n As collection)
            Dim p As CU.SQL.dbParameter

            For Each p In n
                list.Add(p)
            Next
        End Sub
        ' Присваивает элементу с именем n значение v
        Public Sub setItem(ByVal n As String, ByVal v As String)
            Dim p As CU.SQL.dbParameter
            '_all = New Collection

            Dim i, x As Int32
            x = list.Count
            For i = 1 To x
                p = Me.Item(i)
                If p.Name = n Then
                    p.Value = v
                    Me.Remove(i)
                    If i < x Then
                        Me.collection.Add(p, , i)
                    Else
                        Me.Add(p)
                    End If
                End If
            Next
        End Sub
        ' Возвращает элемент с именем n
        Public Function getItem(ByVal n As String) As CU.SQL.dbParameter
            Dim p As CU.SQL.dbParameter
            '_all = New Collection

            For Each p In Me
                If p.Name = n Then
                    Return p
                End If
            Next
        End Function
        ' Присоединяет новую коллекцию к текущей
        Public Sub merge(ByVal n As collection)
            Dim p As CU.SQL.dbParameter

            For Each p In n
                Me.Add(p)
            Next
        End Sub
    End Class

Но оно вызываеть - Исключение типа System.StackOverflowException. smile
вот тут:
Код

Public Sub merge(ByVal n As collection)
            Dim p As CU.SQL.dbParameter

            For Each p In n
                Me.Add(p)
            Next
End Sub

Исправил на
Public Sub merge(ByVal n As Parameters)
            Dim p As CU.SQL.dbParameter

            For Each p In n
                Me.Add(p)
            Next
End Sub


Но всёравно не работает - не выходит коллекция с дополнительными вожможностями.... smile


Это сообщение отредактировал(а) JaguarSmith - 3.2.2006, 00:04
PM MAIL YIM   Вверх
Exception
Дата 2.2.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



В моем коде вместо GetItem и SetItem есть свойство Item, к-ое выполняет те же функции. Причем, для индексации наследовать нужно у DictionaryBase. Чем именно тебя не устраивает мой код?
PM   Вверх
JaguarSmith
Дата 3.2.2006, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



Ну в Dictionary это набор пар элементов Key-Value а мне нужна просто коллекция элементов - мну смущает этот самый Кеy...
А с коллекцией у мну не выходит - чегойто я делаю неправильно - хотя я вроде с MSDN слизал идею но обьекты в коллекцию не добавляются
Вот тут
Код

   Public Sub setItem(ByVal n As String, ByVal v As String)
            Dim p As CU.SQL.dbParameter
            '_all = New Collection

            Dim i, x As Int32
            x = list.Count
            For i = 1 To x
                p = Me.Item(i)
                If p.Name = n Then
                    p.Value = v
                    Me.Remove(i)
                    If i < x Then
                        Me.collection.Add(p, , i)
                    Else
                        Me.Add(p)
                    End If
                End If
            Next
        End Sub

Me.Remove(i) Вызывает ашипку на том основании что типа нет такого элемента в коллекции...

Это сообщение отредактировал(а) Exception - 3.2.2006, 01:52
PM MAIL YIM   Вверх
Exception
Дата 3.2.2006, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Если ты хочешь, чтобы кто-нибудь понял твой код, называй переменные нормально! Я так и не понял, чем тебя не устраивает Dictionary: тебе ведь и нужна индексация по Name, вот тебе и key. И никаких путанных setItem, getItem, просто свойство Item.
PM   Вверх
JaguarSmith
Дата 3.2.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



smile Да нет! Спасибо большое! Я узнал действительно много полезного и ценного.

Просто с практической точки зрения - этот класс - часть другого большого класса и тот настроен на работу как и программа которая его использует с коллекциями а кроме того я хотел чтобы работа с этим классом была бы максимально простой и с этой точки зрения Key - просто лишний элемент и лишняя головная боль - мой кривой вариант он хоть был и кривой, но абсолютно рабочий(ну за исключением GetEnumerator) поэтому если я и буду рыть то именно в сторону CollectionBase а не DictionaryBase.

Отдельное спасибо за - "Переход на VB .NET: стратегии, концепции, код" smile
PM MAIL YIM   Вверх
Exception
Дата 3.2.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Ок smile . Удачи в изысканиях!
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.