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