C#:使用 params 参数分配数组
C#: assign array with params argument
反对这样做的原因是什么?:
public struct T
{
private float[] Elements { get; set; }
public T(params float[] elements)
{
Elements = elements;
}
}
这会不会导致未定义的行为?或者垃圾收集器是否会在数组被使用后保持其活动状态?
只是提供一个答案并添加一些细节。
这是完全合法的。编译器实际上会转换
new T(1, 2, 3)
到
new T(new float[]{1, 2, 3})
由于数组是引用类型,构造函数将只分配一个引用。由于引用由垃圾收集器跟踪,因此不存在内存泄漏或其他可能影响 c++ 的问题的风险。
来自language specification(强调我的)
Within a method that uses a parameter array, the parameter array behaves exactly like a regular parameter of an array type. However, in an invocation of a method with a parameter array, it is possible to pass either a single argument of the parameter array type or any number of arguments of the element type of the parameter array. In the latter case, an array instance is automatically created and initialized with the given arguments.
反对这样做的原因是什么?:
public struct T
{
private float[] Elements { get; set; }
public T(params float[] elements)
{
Elements = elements;
}
}
这会不会导致未定义的行为?或者垃圾收集器是否会在数组被使用后保持其活动状态?
只是提供一个答案并添加一些细节。
这是完全合法的。编译器实际上会转换
new T(1, 2, 3)
到
new T(new float[]{1, 2, 3})
由于数组是引用类型,构造函数将只分配一个引用。由于引用由垃圾收集器跟踪,因此不存在内存泄漏或其他可能影响 c++ 的问题的风险。
来自language specification(强调我的)
Within a method that uses a parameter array, the parameter array behaves exactly like a regular parameter of an array type. However, in an invocation of a method with a parameter array, it is possible to pass either a single argument of the parameter array type or any number of arguments of the element type of the parameter array. In the latter case, an array instance is automatically created and initialized with the given arguments.