Оценить выражение
Итак, у меня есть объект с некоторыми свойствами, например: 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.d1
, когда index i=1
вызов Dim.d2
и так до 50.
Есть идеи?
3 ответа
Вы можете использовать методы в 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 и получить доступ, например, к d1
, d2
, d2
и т. д. тогда это где вы используете 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
Для этого нужны массивы или списки!
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