字节数组上的可选方法参数

本文关键字:方法 参数 字节数 数组 字节 | 更新日期: 2023-09-27 18:17:31

如何为字节数组参数设置默认值?下面的代码不能工作…

public static void init(SomeByteArray[] = {1, 2, 3, 4}) {
    //Do Something
}

这可能吗?

我在。net Micro Framework 4.1中这样做,如果它有任何区别…

字节数组上的可选方法参数

From MSDN:

默认值必须是下列表达式类型之一:

  • 一个常量表达式;
  • new ValType()形式的表达式,其中ValType是值类型,例如枚举或结构体;
  • 形式默认的表达式(ValType),其中ValType是值类型。

所以数组实例不能作为默认值。

最好的解决方案可能是定义两个重载,如下所示:
public static void Init()
{
    Init(new byte[] { 1, 2, 3, 4 });
}
public static void Init(byte[] data)
{
    ...

可以,但需要在方法中分配,默认值必须是null,如下所示:

public static void init(byte[] SomeByteArray = null)
{
    SomeByteArray = SomeByteArray ?? new byte[] {1, 2, 3, 4};
    //carry on with your method.
}

你不能那样做。默认形参必须是编译时常量,不幸的是数组不是。

但是,您可以这样做:

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
}

尝试:

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
    } 
}