C# 如何将字符串数组传递到属性构造函数中?
编辑: 感谢@Sweeper指出,我在下面的示例中遇到的特定问题已在中解决。这并没有直接回答这个问题,但是由于编译器的bug,它提供了必要的解决方法 原始问题: 我很难将我观察到的属性参数类型的某些行为与官方文档中所述的协调起来。在to中,他引用了ECMA 334v4的内容,其中写道: §24.1.3属性参数类型 属性类的位置参数和命名参数的类型仅限于属性参数类型,即:C# 如何将字符串数组传递到属性构造函数中?,c#,C#,编辑: 感谢@Sweeper指出,我在下面的示例中遇到的特定问题已在中解决。这并没有直接回答这个问题,但是由于编译器的bug,它提供了必要的解决方法 原始问题: 我很难将我观察到的属性参数类型的某些行为与官方文档中所述的协调起来。在to中,他引用了ECMA 334v4的内容,其中写道: §24.1.3属性参数类型 属性类的位置参数和命名参数的类型仅限于属性参数类型,即: 以下类型之一:bool,byte,char,double,float,int,long,short,string 类型对象
- 以下类型之一:
,bool
,byte
,char
,double
,float
,int
,long
,short
string
- 类型
对象
- 类型
System.type
- 枚举类型,前提是它具有公共可访问性,并且嵌套它的类型(如果有)也具有公共可访问性
- 上述类型的一维数组。
bool
、int
、double
、string
、类型
、枚举等以及这些类型的数组
(在两个引文中强调)
但是,当我尝试声明类型为string[]
的属性参数时,出现以下错误:
属性参数数组创建必须是“object[]”类型的一维数组
我应该注意,如果我只需要一个字符串数组,那么为测试方法使用params[]
参数就足够了;但是,我需要两个数组
有人能发现我遗漏了什么吗?如中所示,如果使用命名参数,则提供字符串[]
参数确实有效,如下所示:
[TestCase(arg: new[] {"A", "B"})]
public void TestStringArrayArgs(string[] strArr)
{
// Run test . . .
}
这是由于两个TestCaseAttribute
构造函数(我通过JetBrains反编译器检查过)之间的重载冲突造成的:
这解决了我原来的问题。对于那些像我最初问的那样寻找问题答案的人来说,对于同一个问题,我们会更详细地研究将字符串[]
参数转换为对象[]
参数的基本问题
[TestCase(arg: new[] {"A", "B"})]
public void TestStringArrayArgs(string[] strArr)
{
// Run test . . .
}
public TestCaseAttribute(params object[] arguments) { . . . }
public TestCaseAttribute(object arg) { . . . }