如何通过VB.NET中的数组访问类变量?

时间:2009-03-23 19:57:13

标签: vb.net class

如果我有以下课程和声明:

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

我可以访问每个变量,因此lLocation.SysLocationId等。是否有另一种方式,所以我可以通过索引访问每个变量,所以像lLocation(0),lLocation(1)等,它给出了我可以灵活地通过下一个循环或相对于其他来源(如数据表)来比较相同类型的类。

6 个答案:

答案 0 :(得分:2)

如果你的目标是比较,通常你要做的是实现IComparable接口或重载><运算符(如果需要排序)或只是{ {1}}运算符(如果需要等效)。

您只需在一个位置编写一个函数,并在需要进行比较时调用该函数。与存储在数据库中的对象进行比较也是如此。放置这些函数的位置取决于您的应用程序体系结构,但对于对象 - 对象比较,您可以将它作为=类本身的一部分。

答案 1 :(得分:0)

不,你不能完全做到这一点。

您必须使用反射来获取属性,但您必须知道返回的属性的顺序无法保证(如果您想以数字方式对它们进行索引,这很重要。)

因此,在处理属性(和索引)时,您必须保持排序顺序一致。

答案 2 :(得分:0)

您是否在寻找名单:

Dim LocationList As List<objLocation>;

For Each loc As objLocation In LocationList
    loc.whatever
Next

或使用索引:

For i = 0 To LocationList.Length - 1
    LocationList(i).whatever
Next
抱歉,如果VB语法不正确......我最近一直在做C#而没有VB

答案 3 :(得分:0)

您可以按照以下方式执行此操作。它是C#,在VB中使用索引器有点不同,但你应该绝对能够在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; }
   }
}

现在,您拥有具有以前属性的对象,但存储在数组中,您也可以通过索引器访问它们。

答案 4 :(得分:0)

此处没有内置语言支持。但是,您可以通过在类

上创建默认索引器属性来模拟此情况
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

然后你可以按如下方式使用它

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

答案 5 :(得分:0)

这个方法我在公共结构中实现,以返回存储在结构中的字符串变量数组:

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

将它放在结构或类中。也许这个示例代码有帮助。