Collection-Inhalt darf nicht geändert werden

05/10/2009 - 09:49 von Karsten Sosna | Report spam
Hallo NG,
habe da ein kleines Problem. Ich habe eine Eigenschaft "Settings" für eine
List(Of SettingClass). Diese Collection darf als gesamtes geàndert werden.
Jedoch dürfen die Einzelelemente nicht veràndert werden. Also
\\\
cls.Settings = "andere Liste"
///
ist erlaubt. Aber
\\\
cls.Settings(index) = "anderes Setting"
///
darf nicht zugelassen werden. Gleiches gilt für
\\\
cls.Settings(index).Member1 = newValue
///
Ich weiß noch nicht wie ich so etwas implementieren soll. Mein Gedankengang
ist eine Collection zu erstellen, die im Constructor ein Array von
SettingClass erwartet. Damit könnte ich Item-Eigenschaft der Collection auf
ReadOnly setzen. Somit hàtte ich den ersten nicht zulàssigen Fall erledigt.
Für den zweiten Fall könnte ich wieder den Constructor bemühen und alle
Member der SettingClass setzen(sind nur 5). Die einzelnen Member könnte ich
dann wieder mit ReadOnly versehen. Ein Problem sehe ich allerding in der
Instanziierung der Collection. Hier kann es vorkommen, das hier einige
tausend Elemente eingefügt werden müssen, vorsichtige Hochrechnung aber so
500.000 können das ohne Probleme schon mal werden. Hier müssen dann also auf
einen Schlag einige MB bewegt werden.

Gibt es vielleicht noch andere Lösungsansàtze wie ich mein obiges Problem
lösen könnte.
Danke für jeden Tipp
Gruß Scotty
 

Lesen sie die antworten

#1 Fabian Aiteanu
05/10/2009 - 20:45 | Warnen spam
Hallo Karsten,

zumindest der erste Teil der Anforderung ist recht einfach mit einer
ReadOnlyCollection zu erledigen. Beispiel hier:
http://dotnettipoftheday.org/tips/c...donly.aspx

Für den zweiten Teil halte ich die Sache mit dem Konstruktor für recht
vernünftig.
Alternativ kannst du ein Interface erstellen, dass nur ReadOnly-Member
enthàlt, und in der Collection enthalten ist. Das ist natürlich nicht so
wirklich sicher, aber ich kenne die genauen Anforderung nicht.

- Code etwa so

Interface IReadOnlySetting
Public ReadOnly Property Setting1() As String
Public ReadOnly Property Setting2() As String
End Interface

Public Class SettingClass
Implements IReadOnlySetting

Public Property Setting1() As String Implements
IReadOnlySetting.Setting1
' Get, Set
End Property
Public Property Setting2() As String Implements
IReadOnlySetting.Setting2
' Get, Set
End Property
End Class

-

Class Cls
Public Settings as ReadOnlyCollection(Of IReadOnlySetting)
End Class

cls.Settings = deineListOfSettingsClass.AsReadOnly()

cls.Settings.Add(...) 'Sollte nicht möglich sein
cls.Settings(3).Setting1 = "Foo" 'Sollte nicht möglich sein
Directcast(cls.Settings(3), SettingClass).Setting1 = "Foo" 'Sollte
möglich sein
- Ende Code

Das ganze ist jetzt nur aus dem Kopf aufgeschrieben, könnte aber
funktionieren :-)

Ob das ganze für 500k Datensàtze sinnvoll ist, wage ich mal zu bezweifeln,
oder in welcher Anwendung kann man schon so unglaublich viele Settings
einstellen? Deine armen Benutzer... Aber gut, das wirst du letztlich besser
wissen.

Viele Grüße,
Fabian

Ähnliche fragen