2009-03-23 7 views
0

Si j'ai la classe et la déclaration suivante:Comment puis-je accéder à une variable de classe via un tableau dans VB.NET?

Public Class objLocation 
    Public SysLocationId As String 
    Public NameFull As String 
    Public LatRaw As String 
    Public LongRaw As String 
    Public Active As Integer 
End Class 

dim lLocation as new objLocation 

Je peux accéder à chaque variable ainsi lLocation.SysLocationId, etc. Est-il un autre moyen, donc je ne peux accéder à chaque variable par index, donc quelque chose comme lLocation (0) , lLocation (1), etc., ce qui me donne la possibilité de comparer avec des classes du même type via une boucle pour la prochaine, ou avec d'autres sources, comme un datatable.

+0

La notation hongroise sur le nom de la classe ... Ce n'est pas juste. Une classe n'est pas un objet! – Welbog

+0

Hongrois n'importe où dans .Net n'est pas correct. –

Répondre

0

Il n'y a pas de prise en charge langauge intégrée pour cela. Cependant, vous pouvez simuler cela en créant une propriété indexeur par défaut sur la classe

Public Class objLocation 
    ... 
Default Public ReadOnly Property Indexer(ByVal index As Integer) 
    Get 
     Select Case index 
      Case 0 
       Return SysLocationId 
      Case 1 
       Return NameFull 
      Case 2 
       Return LatRaw 
      Case 3 
       Return LongRaw 
      Case 4 
       Return Active 
      Case Else 
       Throw New ArgumentException 
     End Select 
    End Get 
    End Property 

Ensuite, vous pouvez l'utiliser comme suit

Dim x As objLocation = GetObjLocation 
Dim latRaw = x(2) 
+0

Toutes ces réponses étaient excellentes, mais je pense que celle-ci est la plus adaptée à ce que je veux faire, à savoir parcourir des classes variables par index, obtenir les valeurs et les assigner ensuite à une base de données. – CDM

0

Non, vous ne pouvez pas le faire purement et simplement.

Vous devez utiliser la réflexion pour obtenir les propriétés, mais vous devez être conscient qu'il n'y a aucune garantie sur l'ordre des propriétés renvoyées (ce qui est important si vous voulez les indexer numériquement). À cause de cela, vous devrez garder l'ordre de tri cohérent lorsque vous travaillez avec les propriétés (et les index).

0

Vous cherchez une liste:

Dim LocationList As List<objLocation>; 

For Each loc As objLocation In LocationList 
    loc.whatever 
Next 

ou d'utiliser l'index:

For i = 0 To LocationList.Length - 1 
    LocationList(i).whatever 
Next 

désolé, si la syntaxe VB ne va pas ... Je fais C# récemment et pas VB

0

Vous pouvez le faire comme suit. C'est C# et quelque chose est un peu différent avec l'utilisation d'indexeurs dans VB, mais vous devriez absolument pouvoir le faire fonctionner dans VB.

public class ObjLocation 
{ 
    private String[] Properties = new String[5]; 

    public const Int32 IndexSysLocationId = 0; 
    public const Int32 IndexNameFull = 1; 
    public const Int32 IndexLatRaw = 2; 
    public const Int32 IndexLongRaw = 3; 
    public const Int32 IndexActive = 4; 

    // Repeat this for all properties 
    public String SysLocationId 
    { 
     get { return this.Properties[ObjLocation.IndexSysLocationId]; } 
     set { this.Properties[ObjLocation.IndexSysLocationId] = value; } 
    }   

    public String this[Int32 index] 
    { 
     get { return this.Properties[index]; } 
     set { this.Properties[index] = value; } 
    } 
} 

Maintenant, vous avez l'objet avec les propriétés comme avant, mais stockées dans un tableau et vous pouvez également y accéder via un indexeur.

2

Si votre objectif est de comparaison, généralement ce que vous allez faire est de mettre en œuvre l'interface IComparable ou surcharger les opérateurs >, < (si un ordre est nécessaire) ou tout simplement l'opérateur = (si nécessaire est l'équivalence).

Vous venez d'écrire une fonction à un endroit et invoquez cette fonction lorsque vous avez besoin de faire votre comparaison. Il en va de même pour la comparaison avec des objets stockés dans une base de données. L'emplacement de ces fonctions dépend de l'architecture de votre application, mais pour la comparaison objet-objet, vous pouvez l'inclure dans la classe objLocation elle-même.

0

Cette méthode I mis en œuvre dans une structure publique pour retourner un tableau de variables de chaîne stocké dans une structure:

Public Shared Function returnArrayValues() As ArrayList 

    Dim arrayOutput As New ArrayList() 
    Dim objInstance As New LibertyPIMVaultDefaultCategories() 
    Dim t As Type = objInstance.GetType() 
    Dim arrayfinfo() As System.Reflection.FieldInfo = t.GetFields() 
    For Each finfo As System.Reflection.FieldInfo In arrayfinfo 
     Dim str As String = finfo.GetValue(objInstance) 
     arrayOutput.Add(str) 
    Next 

    Return arrayOutput 
End Function 

Mettez-le dans la structure ou dans une classe. Peut-être que cet exemple de code aide.

Questions connexes