C# 从带有参数的方法中读取属性值
我正在寻找一种方法来获取属性的值,并将其发送到我必须制作的报告中。它的缺点是,当一个方法没有参数,但任何带有参数的方法都会抛出错误时,我找到了一个答案 我最初的问题是如何从方法中读取属性的值,这个问题回答了我() 这是一直有效的代码C# 从带有参数的方法中读取属性值,c#,reflection,attributes,getgauge,C#,Reflection,Attributes,Getgauge,我正在寻找一种方法来获取属性的值,并将其发送到我必须制作的报告中。它的缺点是,当一个方法没有参数,但任何带有参数的方法都会抛出错误时,我找到了一个答案 我最初的问题是如何从方法中读取属性的值,这个问题回答了我() 这是一直有效的代码 public static void WriteStepNamesOfMethodToReport(Type classType, string methodName) { MethodInfo methodInfo = classType.GetRunti
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("---------------------");
}
这就是我设置要发送的变量的方式(是的,我可以做一行,但我在一个地方定义它,并在许多地方使用它,所以这就是它需要的方式)
以属性[]属性….开头的代码行。。。。尝试提供包含参数的方法(methodName)时引发错误。当我输入“methodName”时,它总是这样(没有括号,因为它不会接受这些)。产生的错误表示:
Object reference not set to an instance of an object.
我尝试从引发错误的特定方法中临时删除参数,它看到了我正在查找的Step属性,并将其输出到报告中
下面是我使用的类的基本布局(与所有工作的非参数方法的设置相同)
背景:
这是一个自动化项目。我需要在逻辑条件下运行UI自动化中的一些步骤(如果是执行步骤…),而仪表不支持这些步骤。所有执行的步骤都需要输出到最终报告(仪表信息…)。这是一个C#项目。我的需求在Gauge社区的人中并不常见,因此在源代码中包含修复程序被认为是不够优先的(这就是为什么我要做这个变通方法)。希望这足够详细。从根本上说,这是一个
NullReferenceException
问题
对GetRuntimeMethod
的调用是“给我一个没有参数的同名方法”。它返回null
,因为您想要的方法有参数。当您删除参数时,它会起作用,因为它符合“无参数”条件
如果需要特定的参数类型,请指定它们,例如newtype[]{typeof(string)}
如果需要任意数量和类型的参数,请使用不接受
type[]
的GetMethods
重载(假设只有一个方法使用该名称,否则将得到不同的异常)或使用GetMethods
从返回的数组中找到所需的方法。错误是什么?无论采用何种方法,链接问题答案中的代码都应有效。错误是:对象引用未设置为对象的实例。我看不到有任何东西表明一个带有参数的方法会有任何不同的行为,因此需要帮助。我将参数从有问题的方法中移除以进行测试,它将看到该属性。无法理解。您能否编辑您的帖子,以包含您试图调用的方法的声明以及您用于\u AClassInTheProject中的amethodname的字符串文字?这就是问题所在。Intellisense说,在我的framework.NET4.5中没有只使用名称的重载,尽管我确实在microsofts站点的其他框架上看到了重载。感谢您的帮助您是在寻找GetRuntimeMethod
还是GetMethod
<只有名称的code>GetMethod应在.NET 4.5中,如下所示:
Object reference not set to an instance of an object.
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
}
}