0

我有一个关于如何使用可配置的方法名称来调用的问题。例如

1.我有一个包含三个元素的 xml 文件,如下所示:

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
    <element attribute1="a" attribute2="b" attribute3="Send" />
</root>

2.我正在使用一个列表(我创建了一个包含三个元素的类并创建了该类的对象类型列表)来存储 xml 文件中的元素。

3.然后使用 For 语句: For Each element As ClassList In GetList 我想从 xml 文件中调用可配置方法:

从理论上讲,我希望调用属性 3 的值而不是 SendWait(该值是 SendWait)。

而不是 SendKeys.SendWait("{ENTER}") 是这样的:

SendKeys.element.Thirdelement()("{ENTER}")
  • element.Thirdelement() 的值为 SendWait

我知道attribute3 可以有2 个值:Send 或Sendwait 我应该使用if 语句,还是有任何可用的解决方案?

If element.ThirdElement() = "SendWait" Then
                                SendKeys.SendWait("{ENTER}")
                            Else
                                SendKeys.Send("{ENTER}")

我是编程新手,所以如果上述陈述之一有偏差,请原谅!

LE:我有一个包含三个成员和属性的新类 ListClass1:

firstElement()
secondElement()
thirdElement()

我正在使用这个类来存储来自 xml 文件的数据

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<element attribute1="a" attribute2="b" attribute3="Send" />
</root>

因此,在我将值添加到列表后,例如: element.ThirdElement()将具有来自属性 3(“发送”)的值。element.secondElement()也将保留属性 2 的值,依此类推。

4

1 回答 1

0

您可以使用反射来完成任务。首先定义一个包含您的方法的类:

Public Class MethodsToExecute
    Public Sub Send(par1)
       SendKeys.Send("{ENTER}") 
    End Sub
    Public Sub SendWait(par1)
       SendKeys.SendWait("{ENTER}")
    End Sub
End Class

然后创建一个 Sub 进行处理:

Public Shared Sub ExecuteMethodByName(ObjectToInvoke As Object, MethodName As String, ParamArray Parameters() As Object) 
     Dim m As Reflection.MethodInfo = ObjectToInvoke.GetType.GetMethod(MethodName)
     m.Invoke(ObjectToInvoke, Parameters)
End Sub

现在执行

dim mte as new MethodsToExecute

迭代彻底的xml文件并执行

 ExecuteMethodByName(mte,element.ThirdElement(), element.firsElement(),element.secondElement())

问题是解决方案依赖于属性顺序而不是它们的名称,而是通过更广泛的反射使用,您也可以处理它。 参数数组示例

可以理解吗?

于 2012-04-11T15:06:47.850 回答