2011-09-28 183 views
1
private static Vector2 DefaultMulFactors = new Vector2(0.5f, 0.5f); 
private static Point DefaultShifts = new Point(0,0); 

public static Vector2 Function(Vector2? mulFactors = MyClass.DefaultMulFactors , Point? shifts = MyClass.DefaultShifts ) 
{ 
    ... 
    return result; 
} 

为什么我的代码不接受我的静态值?我如何将默认参数分配给我的函数参数?确实Vector2? mulFactors = new Vector(0.2,0.3)Vector2? mulFactors = Vector2.Zero不起作用。C#方法的默认值 - 编译错误:编译时常量

回答

6

基本上,你不能。该值必须由编译器支持以允许使用该类型(实质上,该值为常数)。我只想用null这里:

, Point? shifts = null) 

则:

if(shifts == null) shifts = MyClass.DefaultShifts; 
+6

甚至更​​短'shift = shift? MyClass.DefaultShifts;' – Stormenet

+0

我知道这个解决方案,但是我试图不使用if-else块:)谢谢你的回答Marc。 – icaptan

4

从MSDN:

每个可选参数有一个默认值作为其定义的一部分。 如果该参数未发送参数,则使用默认值。 默认值必须是以下表达式类型之一:

常量表达式;

表达形式新ValType(),其中ValType是一个值 类型,如枚举或结构;

默认形式(ValType)的表达式,其中ValType是值 类型。

没有一个提到的情况是你的,这就是为什么它不适合你! :)

+0

更好的答案;) – jackal