是否有一种方法可以使函数使用其可选参数的值?例如,说我有
public void myFunction(bool required, string optional = "This is optional") {...}
我想做这样的事情,
string possiblyNull = null; // the result of another function
myFunction(true, possiblyNull ?? possiblyNull : optional)
答案 0 :(得分:1)
C#编译器嵌入参数的默认值,在调用站点上遗漏任何参数时。在您的情况下,您想使用该参数调用您的方法。因此,这是不可能的,因此您必须在方法的外部或内部使用该检查。如果您确实想防止在调用方法时使用if
子句,则可以更改方法的签名,如下:
public void myFunction(bool required, string optional)
{
optional = optional ?? "This is optional";
...
}
然后这样称呼:
string possiblyNull = null; // the result of another function
myFunction(true, possiblyNull)
答案 1 :(得分:0)
您无法在呼叫站点获得默认值。您需要在方法调用之外进行检查。
string possiblyNull = null;
// ...
if (possiblyNull == null)
myFunction(true);
else
myFunction(true, possiblyNull);
答案 2 :(得分:0)
您已经在那儿了,但是您只需要删除可能性为null:将参数传递给方法时, 你可以这样...
public partial class MainWindow : Window
{
private string optional = "Test";
string possiblyNull = null;
public MainWindow()
{
InitializeComponent();
// here you can check null
myFunction(true, possiblyNull ?? optional);
// Or
myFunction(true);
}
public void myFunction(bool required, string optional = "This is optional")
{
MessageBox.Show(optional);
}
}
答案 3 :(得分:0)
如果您担心的是
null
设置为默认值,因为这将意味着默认值将不会出现在Intellisense中,而呼叫者也不会看到默认值null
,如果为空,则将其替换为默认值,但这意味着将默认值放在两个位置您可以这样做:
private const string OptionalValue = "This is optional!";
public void myFunction(bool required, string optional = OptionalValue)
{
optional = optional ?? OptionalValue;
}
现在你们两者都得到了。默认值显示在Intellisense中,不再重复。
如果只是你
您可以为包含方法的类创建扩展:
public static class Extension
{
// I can't think of how this function name would not be awkward.
public static void MyFunctionThatReplacesNullWithDefault(
this ClassWithOptionalMethod target, bool required, string optional = null)
{
if(optional == null)
target.myFunction(required);
else
target.myFunction(required, optional);
}
}