如何为字节数组参数设置默认值? 下面的代码不起作用......
public static void init(SomeByteArray[] = {1, 2, 3, 4}) {
//Do Something
}
这可能吗?
我在.Net Micro Framework 4.1中这样做,如果它有任何区别......
答案 0 :(得分:5)
来自MSDN:
默认值必须是以下类型的表达式之一:
- 一个恒定的表达;
- 新形式ValType()的表达式,其中ValType是值类型,例如枚举或结构;
- 表单default(ValType)的表达式,其中ValType是值类型。
因此,数组实例不能用作默认值。
最好的解决方案是probbaly两个定义两个重载如下:
public static void Init()
{
Init(new byte[] { 1, 2, 3, 4 });
}
public static void Init(byte[] data)
{
...
答案 1 :(得分:4)
您可以,但需要在方法中指定,默认值必须为null
,如下所示:
public static void init(byte[] SomeByteArray = null)
{
SomeByteArray = SomeByteArray ?? new byte[] {1, 2, 3, 4};
//carry on with your method.
}
答案 2 :(得分:3)
你做不到。默认参数必须是编译时常量,不幸的是数组不是。
但是,你可以这样做:
public static void init(byte[] SomeByteArray = null) {
SomeByteArray = SomeByteArray ?? new byte[] { 1, 2, 3, 4 };
// Do Something
}
或者这个:
public static void init() {
init(new byte[] { 1, 2, 3, 4 });
}
public static void init(byte[] SomeByteArray) {
// Do Something
}
答案 3 :(得分:0)
尝试:
public class MyClass {
private readonly int[] _default = new[] { 1, 2, 3, 4 };
public static void init(int[] myArray = null) {
if (myArray == null) {
// Don't modify _default to ensure thread safe
myArray = _default;
}
//Do Something
}
}