C#, значение параметра по умолчанию для IntPtr

Я хотел бы использовать значение параметра по умолчанию IntPtr.Zero в функции, которая принимает IntPtr в качестве аргумента. Это невозможно, так как IntPtr.Zero не является константой времени компиляции.

Есть ли способ сделать то, что я хочу?


person Tom Davies    schedule 21.10.2012    source источник


Ответы (2)


Несколько неинтуитивно, мягко говоря, вы получаете это, используя оператор new:

    void Foo(IntPtr arg = new IntPtr()) { 
    }

Это было для развлечения, вам, вероятно, больше понравится это:

    void Foo(IntPtr arg = default(IntPtr)) { 
    }
person Hans Passant    schedule 21.10.2012
comment
Черт, у меня было предчувствие, что по умолчанию может работать, но поблизости не было компилятора, чтобы проверить - так что перестраховывайся. Хороший ответ. - person Marc Gravell; 21.10.2012

Поскольку IntPtr является структурой, вы можете использовать Nullable-of-T?

static void SomeMethod(IntPtr? ptr = null) {
    var actualPtr = ptr ?? IntPtr.Zero;
    //...
 }
person Marc Gravell    schedule 21.10.2012