5

我如何为字节数组参数设置默认值?下面的代码不起作用...

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

这可能吗?

我在 .Net Micro Framework 4.1 中执行此操作,如果有任何不同...

4

4 回答 4

6

来自MSDN

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

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

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

最好的解决方案可能是两个定义两个重载,如下所示:

public static void Init()
{
    Init(new byte[] { 1, 2, 3, 4 });
}

public static void Init(byte[] data)
{
    ...
于 2013-06-09T19:03:24.520 回答
4

可以,但是需要在方法中赋值,默认值必须是null,像这样:

public static void init(byte[] SomeByteArray = null)
{
    SomeByteArray = SomeByteArray ?? new byte[] {1, 2, 3, 4};
    //carry on with your method.
}
于 2013-06-09T19:01:27.263 回答
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
}
于 2013-06-09T18:59:01.470 回答
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
    } 
} 
于 2013-06-09T18:58:22.280 回答