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

时间:2012-02-29 16:05:29

标签: c# parameters xna optional-parameters xbox

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

我有这样的情况:

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

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

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

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

然而,由于参数数量较多,这是不切实际的。

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

我可以选择,也可能最实际的是,需要所有的参数。

func(float? a, int? b)

然后这样打电话:

func(null, 4)

第一个未定义的地方。

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

3 个答案:

答案 0 :(得分:3)

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

如果类型超出您的控制范围:添加重载的扩展方法。

答案 1 :(得分:2)

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

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

查看以下链接:

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

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

答案 2 :(得分:1)

我认为您无法启用可选参数。也许你可以使用另一种选择。就像创建数组的params关键字一样,您只需将对象作为参数传递

public class MyParams 
{
     public float? a {get;set;}
     public int? b {get;set;}
}

func(new MyParams { b = 5 });

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