C#XNA Xbox,在这种情况下,可选参数不是可选的

显然,当在Xbox上使用时,可选参数在C#Xna中不起作用,在编译期间会声明非支持性。

我有这样的情况:

func(float? a = null, int? b = null) 

大量的可选参数默认为“未定义”值,为null。 这种情况是必需的。

在上面的简化示例中,这可以解包,但这不是可选参数允许:

 func() func(float? a) func(int? b) func(float? a, int? b) 

然而,对于大量参数,这是不实际的。

不允许某些参数定义的组合,并导致通过函数的路径,其中我抛出参数exception,其他导致根据参数的值发生各种不同的事情。 这类似于具有相同名称但不相同的函数之间的多态性。

我可以替代地,并且可能最实际地,需要所有参数。

 func(float? a, int? b) 

然后这样打电话:

 func(null, 4) 

第一个是未定义的。

有没有办法在Xbox上的C#XNA中启用可选参数?

我当然使用可选参数在XBOX上运行,但它需要对构建设置进行一些调整。 据我所知,它不适用于WP7。

我认为它可能与使用的语言版本有关。

查看以下链接:

http://msdn.microsoft.com/en-us/library/ff827884.aspx

http://forums.create.msdn.com/forums/p/54007/327944.aspx

我会使用带有不同数量参数的老式重载,并从那里转发调用,以及“默认”值。 零代码更改为呼叫者。

如果类型不在您的控件之内:扩展方法以添加重载。

我认为你不能启用可选参数。 也许你可以使用替代品。 就像创建数组的params关键字一样,您可以将对象作为参数传递

 public class MyParams { public float? a {get;set;} public int? b {get;set;} } func(new MyParams { b = 5 }); 

使用该解决方案,您可以获得所需的所有灵活性。 您可以添加,删除参数,而无需考虑添加/删除新的重载。 如果你删除或编辑一个参数,你将得到一个编译时错误,这可能是你多次重载时可能遇到的错误。