Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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# - Fatal编程技术网

C# 如何将字符串数组传递到属性构造函数中?

C# 如何将字符串数组传递到属性构造函数中?,c#,C#,编辑: 感谢@Sweeper指出,我在下面的示例中遇到的特定问题已在中解决。这并没有直接回答这个问题,但是由于编译器的bug,它提供了必要的解决方法 原始问题: 我很难将我观察到的属性参数类型的某些行为与官方文档中所述的协调起来。在to中,他引用了ECMA 334v4的内容,其中写道: §24.1.3属性参数类型 属性类的位置参数和命名参数的类型仅限于属性参数类型,即: 以下类型之一:bool,byte,char,double,float,int,long,short,string 类型对象

编辑: 感谢@Sweeper指出,我在下面的示例中遇到的特定问题已在中解决。这并没有直接回答这个问题,但是由于编译器的bug,它提供了必要的解决方法

原始问题: 我很难将我观察到的属性参数类型的某些行为与官方文档中所述的协调起来。在to中,他引用了ECMA 334v4的内容,其中写道:

§24.1.3属性参数类型

属性类的位置参数和命名参数的类型仅限于属性参数类型,即:

  • 以下类型之一:
    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) { . . . }