我正在将C ++程序移植到C#。我刚开始学习C#。
在C ++中,如果我使用字符串参数
定义构造函数class ProgramOption { public: ProgramOptions(const char* s=0); };
然后我可以在ProgramOptions的位置使用string参数,例如
int myfucn(ProgramOption po);
myfunc("s=20;");
我也可以将它用作默认参数,例如
int myfunc(ProgramOption po=ProgramOption());
不幸的是在C#中,即使我有
class ProgramOption { public ProgramOptions(const char* s=0) {...} }
我发现我不能将它用作默认参数,
int myfunc(ProgramOption po=new ProgramOption());
我没有显式转换就无法传递字符串文字,例如
myfunc("s=20");
这在C#中根本不可能,或者我可以实现一些方法来实现它吗?感谢
答案 0 :(得分:6)
您需要定义隐式强制转换运算符。像这样:
class ProgramOption
{
//...
public ProgramOptions(string str = null)
{
//...
if (!string.IsNullOrWhiteSpace(str))
{
/* store or parse str */
//...
}
}
//...
public static implicit operator ProgramOptions(string str)
{
return new ProgramOptions(str);
}
}
然后允许你拥有这样的功能:
int myfunc(ProgramOption po = null)
{
po = po ?? new ProgramOptions(); //default value
//...
}
并称之为:
myfunc("some text");
答案 1 :(得分:1)
来自Does C# have default parameters?
在C ++等语言中,默认值可以作为方法声明的一部分包含在内:
void Process(员工员工,bool bonus = false)
...
C#没有此功能。
但也
更新:
从C#4.0开始可以使用命名和可选(默认)参数。
Visual C#2010引入了命名和可选参数。 ...可选参数使您可以省略某些参数的参数。
以后
可选参数
- 一个恒定的表达;
- 新形式ValType()的表达式,其中ValType是值类型,例如枚举或结构;
- 表单default(ValType)的表达式,其中ValType是值类型。