Swa*_*pta 9 .net optional-parameters c#-4.0
如何将可选参数传递给C#中的方法?
假设我创建了一个名为Sendcommand的方法
public void SendCommand(String command,string strfilename)
{
if (command == "NLST *" ) //Listing Files from Server.
{
//code
}
else if (command == "STOR " + Path.GetFileName(uploadfilename)) //Uploading file to Server
{
//code
}
else if ...
}
Run Code Online (Sandbox Code Playgroud)
现在我想在main方法中调用此方法
Sendcommand("STOR ", filename);
Sendcommand("LIST"); // In this case i dont want to pass the second parameter
Run Code Online (Sandbox Code Playgroud)
怎么实现呢?
Mar*_*ris 15
在.NET 4之前,您需要重载该方法:
public void sendCommand(String command)
{
sendCommand(command, null);
}
Run Code Online (Sandbox Code Playgroud)
.NET 4引入了对默认参数的支持,允许您在一行中完成所有这些操作.
public void SendCommand(String command, string strfilename = null)
{
//method body as in question
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,在你编写的问题中,你不是在第一个例子中调用方法:
Sendcommand("STOR " + filename);
Run Code Online (Sandbox Code Playgroud)
仍然使用单个参数,这是两个字符串的串联.
cod*_*nix 12
使用params属性:
public void SendCommand(String command, params string[] strfilename)
{
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样称呼它:
SendCommand("cmd");
SendCommand("cmd", "a");
SendCommand("cmd", "b");
Run Code Online (Sandbox Code Playgroud)
或者如果您使用C#4.0,则可以使用新的可选参数功能:
public void SendCommand(String command, string strfilename=null)
{
if (strfilename!=null) ..
}
Run Code Online (Sandbox Code Playgroud)
对此的显而易见的答案应该是,不要那样做。
您应该为每个命令拥有一个单独的方法,或者为每个命令拥有一个命令基类和一个单独的派生类,以及一个 Execute 方法。
拥有一种方法来处理所有可能的命令是糟糕的设计。
你真的不希望一个Sendcommand()人处理每一个可能的命令。