1

我有很多功能可以获取信息并填充类或其他东西。他们愿意接受不完整的信息并经常填充默认值。

这是一个粗略的例子。

string name;
string address;
string phonenum;

void SaveClass(string a)
{
    SaveClass(a, "UNSET", "UNSET");
}

void SaveClass(string a, string b)
{
    SaveClass(a, b, "UNSET");
}

void SaveClass(string a, string b, string c)
{
    name = a;
    address = b;
    phonenum = c;
}

不过,如果我能做这样的事情,那就太酷了。

void SaveClass(string a, optional string b="UNSET", optional string c="UNSET")
{
    name = a;
    address = b;
    phonenum = c;
}

这样我就可以一口气写出所有三个重载。有这样的吗?

谢谢你的帮助。

4

2 回答 2

2

从 C# 4 开始,您可以使用可选参数完全做到这一点:

void SaveClass(string a, string b = "UNSET", string c = "UNSET")

然后在调用该方法时,您可以指定命名参数

SaveClass("Foo", c: "Some value for C");

或者只使用按顺序填充的位置参数:

SaveClass("Foo", "Some value for B");

即使您不使用可选参数,也可以使用命名参数,如果您在方法调用中有很多参数并且不清楚哪个是哪个参数,这会很有帮助。

有一些限制:可选参数的默认值必须是常量,可选参数必须出现在方法签名的末尾(除了params参数),但这些限制都是有充分理由的。

查找更多文档时需要注意的一件事 - 尽管这些功能被正确地称为可选参数命名参数,但许多文章(包括MSDN 本身中的一些文章)将讨论“可选参数”甚至“命名参数”。

于 2013-06-15T07:18:25.997 回答
0

你可以这样做。只需optional从参数中删除部分。

它们被称为可选参数。在这里,有一个 MSDN 链接:可选参数。

你像这样使用它们:

void MyFunc(string x, int y = 0)
{
    //do whatever
}

小提示:它是 C# 4 或更高版本,所有可选值必须是常量,因为编译器所做的实际上是将它们刻录到编译后的代码中。这只是语法糖,真的。

于 2013-06-15T07:18:29.857 回答