是否可以在 Windows Phone XNA 应用程序中使用可选参数(和其他纯语法 C# 4.0 功能)?
我已经阅读并听到了关于此的相互矛盾的信息。在我的应用程序的高级构建设置中,语言版本设置为 C# 3.0(C# 4.0在语言版本下拉列表中不可用)。3.0 是最初将用于 Windows Phone 开发的“官方”C# 版本吗?
甚至期望 C# 4.0 功能完全可用,我是不是很傻?
是否可以在 Windows Phone XNA 应用程序中使用可选参数(和其他纯语法 C# 4.0 功能)?
我已经阅读并听到了关于此的相互矛盾的信息。在我的应用程序的高级构建设置中,语言版本设置为 C# 3.0(C# 4.0在语言版本下拉列表中不可用)。3.0 是最初将用于 Windows Phone 开发的“官方”C# 版本吗?
甚至期望 C# 4.0 功能完全可用,我是不是很傻?
在 Silverlight 和 XNA 风格之下是一些版本的 .NET 3.x(3.7?)紧凑框架。就 Windows Phone 7 相对于市场的其他部分而言,远远落后于游戏,因此不太可能插入 .NET 4.0 紧凑型框架(afaik 尚不存在)或支持所需的任何其他主要架构更改C# 4.0。
我发现可选参数在 Silverlight 中可以正常工作,但在 XNA 中却不行。我一直在使用#if 东西在共享代码中解决这个问题,如下所示:
#if !SILVERLIGHT
public SomeClass ( ) : this (null)
{
}
public SomeClass(object someParam)
#else
public SomeClass(object someParam = null)
#endif
{
m_someParam = someParam;
}
但这有点难看。我还注意到 Productivity Power Pack 中的 Add References 对话框不适用于 XNA 项目,这表明 XNA 项目有问题。[附带说明,我可以通过 VS 将 Silverlight 应用程序部署和调试到模拟器,但不能通过 XNA 应用程序]
最佳解决方案:利用函数重载。
示例(导致错误):
public void RenderRadius(SpriteBatch spriteBatch, Entity entity, float radiusOverride = -1)
...
解决方案:
public void RenderRadius(SpriteBatch spriteBatch, Entity entity){ RenderRadius(spriteBatch, entity, -1); }
public void RenderRadius(SpriteBatch spriteBatch, Entity entity, float radiusOverride)
...
超级容易。完毕。
我不确定是否可以将可选参数与 Xna 一起使用(我从未想过要这样做),但你可以做你所说的。
http://xboxforums.create.msdn.com/forums/p/54007/515654.aspx
在上面的链接中,它说将您的语言版本设置为默认值,而不是 C# 3.0。看来你是在正确的轨道上。