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

时间:2013-06-09 18:55:49

标签: c# bytearray overloading .net-micro-framework

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

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

这可能吗?

我在.Net Micro Framework 4.1中这样做,如果它有任何区别......

4 个答案:

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