评估表达

时间:2016-06-03 11:12:41

标签: vb.net object express evaluate

所以,我有一个带有一些属性的对象,如下所示:Dim.d1, Dim.d2,...,Dim.d50 返回字符串。例如:Dim.d1="Description A", Dim.d2="Description B",etc

我想要做的是将这些描述归因于Gridview的标题,为此我正在考虑使用索引,比如这个伪代码:

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

所以,基本上,我需要一种方法来根据索引更改对象属性的调用,但我不知道是否可能。在index i=0时,请致电Dim.d1index i=1致电Dim.d2,依此类推,直至50。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

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

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];
}

答案 1 :(得分:1)

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

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

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

End 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

答案 2 :(得分:0)

像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