C# WinRT和可选参数问题

C# WinRT和可选参数问题,c#,windows-runtime,windows-phone-8.1,C#,Windows Runtime,Windows Phone 8.1,我最近遇到了一个问题,在WinRT项目的函数中不能有可选参数 有没有别的办法?我甚至尝试了[optional]关键字。不起作用。以下内容将无法编译: void PrintStuffOptional(string stuff, [Optional] int num) { Console.WriteLine(stuff + ": " + num.ToString()); } 导致: 找不到类型或命名空间名称“可选”是否缺少using指令或程序集引用 和/或: 找不到类型或命名空间名称“Op

我最近遇到了一个问题,在WinRT项目的函数中不能有可选参数


有没有别的办法?我甚至尝试了[optional]关键字。不起作用。

以下内容将无法编译:

void PrintStuffOptional(string stuff, [Optional] int num)
{
    Console.WriteLine(stuff + ": " + num.ToString());
}
导致:

找不到类型或命名空间名称“可选”是否缺少using指令或程序集引用

和/或:

找不到类型或命名空间名称“OptionalAttribute”是否缺少using指令或程序集引用

使用System.Runtime.InteropServices添加;在文件的顶部,应该更正这些问题。但是,从C 4.0开始,您可以声明如下可选参数:

void PrintStuff(string stuff, int num = 0)
{
    Console.WriteLine(stuff + ": " + num.ToString());
}
如果调用方法没有为num参数提供值,它将使用默认值0。因此,void PrintStuff将以两种方式工作:

PrintStuff("a string to print");
PrintStuff("a string to print", 37239);

在Windows运行时组件项目中,公共函数不能具有可选参数,只有私有函数才能具有这些参数


但如果将该项目转换为类库,即使对于公共函数,也可以使用可选参数

另一种可能的方法:使用覆盖的签名

public void TheFunction (string param1, string param2)
{
  [...] //processing stuff
}

public void TheFunction (string param1)
{
   return TheFunction(param1, String.Empty);
}

您应该能够只为参数指定一个默认值,请参阅本文:我不能有可选参数:这是什么意思?你有编译错误吗?错误是什么?为了使用[Optional]关键字,您需要确保添加using System.Runtime.InteropServices;托马斯,这是我犯的错误。WINRT函数中不允许使用可选参数。Dub样式,我理解引用的工作原理。这不是引用问题。这是WINRT函数特有的。您是否尝试过我的答案?我刚刚在一个新的WinRT应用程序中尝试了这两种方法,它们都可以很好地使用可选参数。如果您仍然有问题,请提供更多信息和一些代码。否则,我们只能假设问题出在键盘和椅子之间。请在Windows phone 8.1 WinRT项目上尝试您的代码,然后告诉我是否有效。我真的不是一个不在页面上添加using语句来引用某些东西的程序员。拜托,我认为stackoverflow有更好的开发者。只是想寻求帮助。我确实在一个通用WinRT项目上尝试了我的代码。Windows和Windows Phone部分。我的两种回答都对我有用。如果您可以在问题中添加一些代码,您更有可能获得一些帮助。请在WindowsRuntimeComponent和类库上尝试您的代码一个可以,一个wontAh,这可能就是我的答案的问题所在。在我的测试中,我在两种场景中都使用了私有函数。我没有参加过公开活动。我的错。