WinRT和可选参数问题

时间:2015-08-31 23:22:52

标签: c# windows-runtime windows-phone-8.1

我最近遇到一个问题,我在WinRT项目中无法使用可选参数。

有没有其他选择?我甚至尝试过[optional]关键字。不起作用。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

以下内容无法编译:

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

导致:

  

找不到类型或命名空间名称'Optional'(您是否缺少using指令或程序集引用?)

和/或:

  

找不到类型或命名空间名称'OptionalAttribute'(您是否缺少using指令或程序集引用?)

在文件顶部添加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);