gpt4 book ai didi

c# - 'System.Int32' 类型的对象无法转换为 'System.Int32[]' 类型

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:24 25 4
gpt4 key购买 nike

我有一个这样定义的方法

public void test(string fileName, int totalObjects, params int[] objectsToTest)

我正在尝试像这样在我的 NUnit 测试类中使用它

[TestCase("test.doc", 1, 3)]
public void test(string fileName, int totalObjects, params int[] objectsToTest)

代码编译得很好,但是当 NUnit 测试运行器尝试执行测试时,我得到以下异常:

System.ArgumentException : Object of type 'System.Int32' cannot be converted to type 'System.Int32[]'.

如何消除错误并保持对方法参数使用 TestCase 语法测试的能力?

编辑:

我知道我可以传递一个数组(为此我不需要使用 params 关键字声明最后一个参数)。我试图避免显式传递数组。

最佳答案

你的方法没有问题。实际问题出在 NUnit 框架的 TestCaseAttribute 中:它不够智能,无法克服运行时限制。

在 CLR 运行时(和编译后的代码中)没有“params”,只有相应的数组参数。通过在相应方法上定义 ParamArrayAttribute 实例来保存有关“params”存在的信息。因此,NUnit 尝试将提供的参数作为方法的参数应用,但它不会检查 ParamArrayAttribute 是否在方法上定义,因此不会将最后一个参数包装到数组中。所以你必须明确声明一个数组作为参数,而不是单个值。

UPD:根据提供的评论,我认为这个错误很有可能在最近的 NUnit 版本中得到修复

关于c# - 'System.Int32' 类型的对象无法转换为 'System.Int32[]' 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27134231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com