Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从带有参数的方法中读取属性值_C#_Reflection_Attributes_Getgauge - Fatal编程技术网

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