从带参数的方法中读取属性的值
Read the value of an attribute from a method with parameters
我正在寻找一种获取属性值并将其发送到我必须制作的报告的方法。简而言之,当一个方法没有参数但任何带有参数的方法都会抛出错误时,我找到了答案。
这个问题 (Read the value of an attribute of a method)
回答了我最初提出的如何从方法中读取属性值的问题
这是一直有效的代码
public static void WriteStepNamesOfMethodToReport(Type classType, string methodName)
{
MethodInfo methodInfo = classType.GetRuntimeMethod(methodName, new Type[] { });
Attribute[] attributeList = (System.Attribute[])methodInfo.GetCustomAttributes(typeof(Step), true);
GaugeMessages.WriteMessage("---------------------");
foreach (Attribute attr in attributeList)
{
Step a = (Step)attr;
GaugeMessages.WriteMessage("Executed Step - {0}", a.Names.ElementAt(0));
}
GaugeMessages.WriteMessage("---------------------");
}
这就是我设置要发送的变量的方式(是的,我可以制作一行,但我在一个地方定义它并在许多地方使用它,所以这就是它需要的方式)
Type classType = typeof(AClassInTheProject);
GenericHelpers.WriteStepNamesOfMethodToReport(classType, nameof(AMethodNameFrom_AClassInTheProject));
当我尝试提供其中包含参数的方法 (methodName) 时,以 Attribute[] attribute.... 开头的代码行抛出错误。当我输入 "methodName" 时,它总是那样(没有括号,因为它不会接受那些)。产生的错误说:
Object reference not set to an instance of an object.
我尝试从引发错误的特定方法中临时删除参数,它看到了我正在寻找的 Step 属性并将其输出到报告中。
这是我正在使用的 class 的基本布局(与所有有效的非参数方法相同的设置)。
class AClassInTheProject
{
[Step("Perform the Step For AMethodNameOne"]
AMethodNameOne() // This one works
{
// Code
}
[Step("Perform the Step For AMethodNameTwo"]
AMethodNameTwo(string parameterA) // This one doesn't work
{
// Code
}
}
背景:
这是一个 Gauge UIAutomation 项目。我需要 运行 在逻辑条件下 UI 自动化中的一些步骤(如果执行步骤 ...),Gauge 不提供支持。执行的所有步骤都需要输出到最终报告(GaugeMessages.....)。这是一个 C# 项目。我的需求在 Gauge 社区的人们中并不常见,因此人们认为它的优先级不够高,无法在源代码中包含修复(这就是我采用此解决方法的原因)。希望足够详细。
归根结底,这是一个 NullReferenceException
问题。
对 GetRuntimeMethod
的调用是说 "give me a method by this name with no parameters"。它返回 null
因为你想要的方法有参数。它在您删除参数时起作用,因为它符合 "no parameters" 条件。
如果您需要特定的参数类型,请指定它们,例如new Type[] { typeof(string) }
.
如果您想要任何数量和类型的参数,请使用不带 Type[]
的 GetMethod
重载(假设只有一个方法具有该名称,否则您会得到一个不同的例外)或使用 GetMethods
并从它 returns.
的数组中找到你想要的方法
我正在寻找一种获取属性值并将其发送到我必须制作的报告的方法。简而言之,当一个方法没有参数但任何带有参数的方法都会抛出错误时,我找到了答案。
这个问题 (Read the value of an attribute of a method)
回答了我最初提出的如何从方法中读取属性值的问题这是一直有效的代码
public static void WriteStepNamesOfMethodToReport(Type classType, string methodName)
{
MethodInfo methodInfo = classType.GetRuntimeMethod(methodName, new Type[] { });
Attribute[] attributeList = (System.Attribute[])methodInfo.GetCustomAttributes(typeof(Step), true);
GaugeMessages.WriteMessage("---------------------");
foreach (Attribute attr in attributeList)
{
Step a = (Step)attr;
GaugeMessages.WriteMessage("Executed Step - {0}", a.Names.ElementAt(0));
}
GaugeMessages.WriteMessage("---------------------");
}
这就是我设置要发送的变量的方式(是的,我可以制作一行,但我在一个地方定义它并在许多地方使用它,所以这就是它需要的方式)
Type classType = typeof(AClassInTheProject);
GenericHelpers.WriteStepNamesOfMethodToReport(classType, nameof(AMethodNameFrom_AClassInTheProject));
当我尝试提供其中包含参数的方法 (methodName) 时,以 Attribute[] attribute.... 开头的代码行抛出错误。当我输入 "methodName" 时,它总是那样(没有括号,因为它不会接受那些)。产生的错误说:
Object reference not set to an instance of an object.
我尝试从引发错误的特定方法中临时删除参数,它看到了我正在寻找的 Step 属性并将其输出到报告中。
这是我正在使用的 class 的基本布局(与所有有效的非参数方法相同的设置)。
class AClassInTheProject
{
[Step("Perform the Step For AMethodNameOne"]
AMethodNameOne() // This one works
{
// Code
}
[Step("Perform the Step For AMethodNameTwo"]
AMethodNameTwo(string parameterA) // This one doesn't work
{
// Code
}
}
背景: 这是一个 Gauge UIAutomation 项目。我需要 运行 在逻辑条件下 UI 自动化中的一些步骤(如果执行步骤 ...),Gauge 不提供支持。执行的所有步骤都需要输出到最终报告(GaugeMessages.....)。这是一个 C# 项目。我的需求在 Gauge 社区的人们中并不常见,因此人们认为它的优先级不够高,无法在源代码中包含修复(这就是我采用此解决方法的原因)。希望足够详细。
归根结底,这是一个 NullReferenceException
问题。
对 GetRuntimeMethod
的调用是说 "give me a method by this name with no parameters"。它返回 null
因为你想要的方法有参数。它在您删除参数时起作用,因为它符合 "no parameters" 条件。
如果您需要特定的参数类型,请指定它们,例如new Type[] { typeof(string) }
.
如果您想要任何数量和类型的参数,请使用不带 Type[]
的 GetMethod
重载(假设只有一个方法具有该名称,否则您会得到一个不同的例外)或使用 GetMethods
并从它 returns.