Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Windows Phone XNA应用程序中的可选参数_C#_Windows Phone 7_Optional Parameters - Fatal编程技术网

C#Windows Phone XNA应用程序中的可选参数

C#Windows Phone XNA应用程序中的可选参数,c#,windows-phone-7,optional-parameters,C#,Windows Phone 7,Optional Parameters,是否可以在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远远落后于市

是否可以在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中的“添加引用”对话框不适用于XNA项目,这表明XNA项目存在一些可疑之处。[作为补充说明,我可以通过VS而不是XNA应用程序将Silverlight应用程序部署和调试到emulator上]

最佳解决方案:利用函数重载

示例(导致错误):

解决方案:

public void RenderRadius(SpriteBatch spriteBatch, Entity entity){ RenderRadius(spriteBatch, entity, -1); }
public void RenderRadius(SpriteBatch spriteBatch, Entity entity, float radiusOverride)


超级容易。完成。

我不确定是否可以将可选参数用于Xna(我从未想过),但您可以做您所说的


在上面的链接中,它说将您的语言版本设置为默认,而不是C#3.0。看来你的思路是对的。

谢谢。在我将您的回答标记为答案之前,我想明确一点:您是说我不应该期待C#4.0的任何功能?是的,不要期望在初始生产版本中有任何4.0功能。-1:语言版本与.NET Framework版本没有多大关系。只要不使用少数需要框架支持的C#4.0特性,将C#4.0和.NET CF 3.0结合使用应该没有问题。可选参数不需要框架支持。但是,某些语言功能完全取决于框架版本,例如dynamic关键字。我的回答是绝对正确的,你投-1票是没有道理的。
public void RenderRadius(SpriteBatch spriteBatch, Entity entity){ RenderRadius(spriteBatch, entity, -1); }
public void RenderRadius(SpriteBatch spriteBatch, Entity entity, float radiusOverride)