方法中的可选参数不是使用Rectangle编译时常量错误

我有一个方法,我想使用一个Rectangle可选参数,默认值为(1,1,1,1)。

 void Method(int i, int j = 1, Rectangle rect = new Rectangle(1,1,1,1)) {} //error 

我该如何解决这个问题? (我正在使用XNA,所以它是一个Microsoft.Xna.Framework.Rectangle 。)

你没有。 可选参数必须是编译时常量,而new Rectangle(1,1,1,1)不是编译时常量。

您可以有两个方法重载,一个没有矩形:

 void Method(int i, int j = 1) { Method(i, j, new Rectangle(1,1,1,1)) } 

我刚刚找到了一个更好的方法:

 void MyMethod(string someString, Rectangle rect = default(Rectangle)) { if (rect == default(Rectangle)) rect = new Rectangle(1, 1, 1, 1); } 

可能只有一个问题:当默认值和传递值匹配时,对于== default(T) ,它仍然是真的。 但一种解决方法是传递null并检查它以将其设置为默认值ot类型。