Hej! Deklarera en lista bara, eller ett dictionary. Titta på System.Collections.Generic.List resp. Dictionary. Hej Oscar! Det är iofs ingen skillnad mellan att göra en lista med text mot att göra en lista med någonting annat, bara att deklarera listan för att innehålla någonting annat än text Ok. Ta och läs vad jag skriver någon gång ;) Titta på List _och_ Dictionary Om du vill kunna hämta ett specifikt objekt med hjälp av en identited är ett Dictionary ett alternativ: Tack Oscar och Andreas! En liten fundering bara.. När du säger att det är bra med exempel, har du tittat i dokumentationen? Där finns det gott om exempel nämligen. Ett litet tips bara till nästa gång ;) Hufasiken kan klockan vara 18:26:00 när min tid är 13:48.... BUGG Deklarera och använda objekt globalt.
Försöker att använda objekt men det känns som att mitt sätt är fel.
Även om det fungerar.
I min _Default class så har jag ungefär följande kod
INNAN subrutinerna och funktionerna..
Public ESGL As flygplats = New flygplats
Public ESGG As flygplats = New flygplats
Public ESGR As flygplats = New flygplats
...
...
o.s.v.....
I en annan class:
Public Class flygplats
Dim m_id As String
Dim m_clickonmap As String
Dim m_vaderrad As String
Dim m_metar As String
Dim m_taf As String
Public Property id() As String
Get
Return m_id
End Get
Set(ByVal value As String)
m_id = value
End Set
End Property
o.s.v.
...
...
...
end class
Så småningom tilldelas varje objekt (flygplats) sina olika
värden och egenskaper.
Vad jag inte tycker kan vara rätt är att man i början måste
deklarera alla olika "flygplatser" för att dom skall kunna användas
på lite olika ställen i programmet. Public ESXX.....
Det går ju bra om det bara är några få kända, men om det är 100 st eller 200 st,
då blir det lite småjobbigt.
En lista (array?) skulle fungera ok som man kanske loopar igenom på något sätt.
Sen är det ju inte säkert man inte vet vilka flygplatser man skall skapa.
Det kan ju vara data från en databas, eller en lista av något slag, båda som kanske
ändras lite då och då. Eller kanske användaren skall mata in något i en textruta.
Vad jag undrar är hur man skapar ett nytt objekt ungefär som
Public ESGR As flygplats = New flygplats
och då även göra så man kan använda den på många ställen i programmet/sidan.
Man kan ju inte använda DIM, då blir den ju inte global, ej heller Public i en subrutin
eller funktion.
/PontusSv: Deklarera och använda objekt globalt.
Sv:Deklarera och använda objekt globalt.
Kollade på System.Collections.Generic.List och att göra en lista med text t.ex.
går nog bra. Hur göra en lista med mitt eget "flygplats" och även public, nja
det vet jag inte riktigt.Sv: Deklarera och använda objekt globalt.
Sv:Deklarera och använda objekt globalt.
Att göra en publik lista av typen flygplatser.
Public minLista As New List(Of flygplats)
Dim ESXX As flygplats = New flygplats
Dim ESGL As flygplats = New flygplats
minLista.Add(ESXX)
minLista.Add(ESGL)
<%=minLista.Item(0).id%>
Jag förstår dock fortfarande inte riktigt hur detta skall fungera praktiskt.
Att skapa en lista kan vara användbart men hur man skall kunna använda
ett praktiskt namn såsom ESGG.id eller MinBil.färg o.s.v.
Fick ut data med minLista.Item(0).id. Men att använda ett index är ju inte alls praktiskt.
Vem vet vad index 214 är?
------------------------
Jag vill ta en sträng, kanske från en databas eller en lista av något slag.
Vi kan säga "XYZ".
Göra ett object (flygplats)(som kan användas överallt) med samma namn.
Lägga till lite data. XYZ.färg="Röd" XYZ.årtal=99 o.s.v.
Skriva ut detta på ex. en sida <%=XYZ.färg%>, eller använda på annat sätt i vb-kodenSv: Deklarera och använda objekt globalt.
Sv: Deklarera och använda objekt globalt.
Public ReadOnly flygplatser As New System.Collections.Generic.Dictionary(Of String, flygplats)
När du laddar dina objekt ger du varje elment en nyckel;
flygplatser.Add("ESGL", New flygplats("ESGL", "A", "AA", "AAA", "..."))
flygplatser.Add("ESGG", New flygplats("ESGG", "A", "BB", "BBB", "..."))
flygplatser.Add("ESGR", New flygplats("ESGR", "A", "BB", "CCC", "..."))
Då kan du hämta ute en specifik egenskap utan att loopa igenom om du vet värdet:
Dim key As String = "ESGG"
Console.WriteLine("metar = {0}", flygplatser(key).metar)
Du bör även kanske kika på Linq, litet exempel på enkla frågor:
Private Sub Test(flygplatser As System.Collections.Generic.Dictionary(Of String, flygplats))
Console.WriteLine("====================================")
Console.WriteLine("Query: 1")
Console.WriteLine("Filter: clickonmap = ""A""")
Dim Query1 = From f In flygplatser.Values _
Where f.clickonmap = "A" _
Select f
ListaFlygplatser(Query1)
Console.WriteLine("====================================")
Console.WriteLine("Query: 2")
Console.WriteLine("Filter: vaderrad = ""BB""")
Dim Query2 = From f In flygplatser.Values _
Where f.vaderrad = "BB" _
Select f
ListaFlygplatser(Query2)
Console.WriteLine("====================================")
Console.WriteLine("Query: 3")
Console.WriteLine("Filter: metar = ""CCC""")
Dim Query3 = From f In flygplatser.Values _
Where f.metar = "CCC" _
Select f
ListaFlygplatser(Query3)
Console.WriteLine("====================================")
Console.Read()
End Sub
Private Sub ListaFlygplatser(ByVal list As IEnumerable(Of flygplats))
Dim f As flygplats
For Each f In list
Console.WriteLine("------------------------------------")
Console.WriteLine("id = {0}", f.id)
Console.WriteLine("clickonmap = {0}", f.clickonmap)
Console.WriteLine("vaderrad = {0}", f.vaderrad)
Console.WriteLine("metar = {0}", f.metar)
Console.WriteLine("taf = {0}", f.taf)
Next
Console.WriteLine("------------------------------------")
End Sub
Sv:Deklarera och använda objekt globalt.
Mycket bra med exemplen Andreas!
Lättare att förstå då.
Har använt flera delar av det.
/PontusSv: Deklarera och använda objekt globalt.
http://msdn.microsoft.com/en-us/library/xfhwa508.aspxSv:Deklarera och använda objekt globalt.