1

显然,在 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 中启用可选参数,而不是使用上述任何一种方法?

4

3 回答 3

3

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

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

于 2012-02-29T16:26:01.813 回答
2

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

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

查看以下链接:

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

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

于 2012-02-29T18:38:09.560 回答
1

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

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

func(new MyParams { b = 5 });

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

于 2012-02-29T16:13:48.010 回答