评估表达

Evaluate expression

因此,我有一个具有某些属性的 object,如下所示:Dim.d1, Dim.d2,...,Dim.d50 return 个字符串。例如:Dim.d1="Description A", Dim.d2="Description B",etc.

我想做的是将这些描述归因于 Gridview 的 headers,为此我正在考虑使用索引,就像这样的伪代码:

for i=0 until 49
e.Row.Cells[i].Text = Evaluate(Dim.d(i+1))

所以,基本上,我需要一种方法来根据索引更改对 object 属性的调用,但我不知道这是否可行。当index i=0时,调用Dim.d1,当index i=1调用Dim.d2,以此类推,直到50.

有什么想法吗?

这就是数组或列表的用途!

var dim = new string[50];
dim[0] = "Description A";
dim[1] = "Description B";
..// etc

for(var i=0;i<49;i++)
{
    e.Row.Cells[i].Text = dim[i];
}

就像 Jamiec 已经发布的那样,使用数组或列表。 您的描述标签来自哪里?

如果您的描述是用逗号分隔的字符串,这里是 vb.net 代码:

dim descriptions as String = "Description A,Description B,Description C"
dim myArray as String() = descriptions.Split(cchar(","))

for i as Integer = 1 To myArray.Length
    e.Row.Cells(i-1).Text = myArray(i)
Next

您可以使用 System.Reflection 命名空间中的方法来执行此操作。但是,给出答案是为了回答问题 - 您应该考虑使用其他回答者建议的一些选项,例如使用 List(Of String) 或类似的东西。

无论如何,假设你有一个 class:

Public Class Class1
    Public Property d1 As String
    Public Property d2 As String
    Public Property d3 As String

End Class

然后,假设您创建了 class 的实例并设置其属性:

Dim obj As New Class1
obj.d1 = "Foo"
obj.d2 = "Bar"
obj.d3 = "Test"

如果您随后想要从 1 到 3 进行循环,并访问例如d1d2d2 等等,那么这就是你使用 Reflection:

的地方
For i As Integer = 1 To 3
    Dim info As System.Reflection.PropertyInfo = obj.GetType().GetProperty("d" & i)
    Dim val As String = info.GetValue(obj, Reflection.BindingFlags.GetProperty, Nothing, Nothing, Nothing)
    Debug.Print(val.ToString)
Next

会给你输出:

Foo
Bar
Test