我有很多功能,我可以获取信息并填充类或其他内容。这些人愿意接受不完整的信息并且经常使用默认值填充。
这是一个粗略的例子。
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;
}
这样我就可以快速写出所有三个重载。有这样的吗?
感谢您的帮助。
答案 0 :(得分: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
参数外),但限制都是有效的的原因。
在寻找更多文档时需要注意的一点 - 虽然这些功能被正确地称为可选参数和命名参数,但很多文章(包括some in MSDN itself)将讨论“可选参数”甚至“命名参数”。
答案 1 :(得分:0)
你可以做到这一点。只需从参数中删除optional
部分即可。
它们被称为可选参数。在这里,有一个MSDN链接:Optional Parameters.
你像这样使用它们:
void MyFunc(string x, int y = 0)
{
//do whatever
}
小注意:它是C#4或更高版本,并且所有可选值必须是常量,因为编译器所做的实际上是将它们刻录到已编译的代码中。这只是语法糖,真的。