c# - 如果将 int[] 数组传递给它,为什么 param object[] 数组会变得参差不齐?

标签 c# arrays parameters

当我尝试使用 params 时,我注意到 MS 文档说如果您将一个 int 数组作为方法参数传递,该方法参数具有 params 的签名object[] myParam,就会变成一个多维数组。但我注意到,如果您传递一个 objects[]strings[] 数组,它不会。这似乎是一个令人头疼的工作,因为您必须检查多维数组。

See MSDN link

例子:

public static void UsingParams(params object[] myParam)
{
    //Code to return myParam
}

//myParam[0][0] = {1, 2}, multi-dimensional
int[] myIntArray = {1, 2};
UsingParams(myIntArray);

//myParam[0] = {"1", "2"}, single-dimensional
string[] myStrArray = {"1", "2"};
UsingParams(myStrArray);

为什么会这样?

最佳答案

每当你有一个params参数,编译器将尝试接受一个代表 params 的所有值的数组参数,如果相关位置的参数在该上下文中有效。如果不是,则它会尝试将其视为 params 数组中的一项。值,而不是整个数组。如果它也不能做到这一点,那么它将无法编译。

在你的第二个例子中 string[]可以隐式转换为 object[] , 因此它作为整个参数列表传递。由于数组协方差,这种隐式转换是有效的。

在你的第一个例子中 int[]不能隐式转换为 object[] (数组协变仅限于引用类型),因此它被视为数组中的一个值。一个int[] 可以隐式转换为object , 所以传递的是一个包含 int[] 的对象数组作为其唯一的项目。请注意,以另一个数组作为一项的数组与多维数组截然不同。

关于c# - 如果将 int[] 数组传递给它,为什么 param object[] 数组会变得参差不齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788541/

相关文章:

java - 重新声明参数

c# - 如何获得进程所有者的用户名?

c# - 使用 razor @Html.textboxfor 将字符串表示为货币或小数

c# - 如何生成Excel epplus C#新表,每张表内容不同

c# - EF4 代码首先添加项目我不是很清楚

php - codeigniter 使用 where_in 获取 mysql 表 + 保持结果数组中键数组的顺序

PHP - ini_set() 期望参数 2 是字符串,给定整数

c++ - 除了使用 vector 或 new 之外,还有其他方法可以创建动态大小的数组吗?

java - 如何查看 int 数组中的元素是否为空?

java - Jtwig获取参数显示