[英]Can I make a function in C# take an optional parameter or do I need to overload it?
我在界面中有以下内容:
string GetTopic(string rk);
和这个功能:
public string GetTopic(string rk)
{
return string.Format("{0}.{1}.{2}",
rk.Substring(0, 2).TrimStart('0'),
rk.Substring(2, 2).TrimStart('0').PadLeft(1, '0'),
rk.Substring(4, 2).TrimStart('0').PadLeft(1, '0'));
}
我想添加一个可选的第二个参数,以使函数可以这样调用:
var a = GetTopic("010101")
要么
var b = GetTopic("010101","test")
在第一种情况下,我希望得到输出“ 1.1.1”,在第二种情况下,我希望得到输出“ 1.1.1-test”。
这是否可能,或者我需要执行两个功能,并让一个重载另一个功能? 如何在界面中指定可选的第二个参数?
您可以设置默认值:
public string GetTopic(string rk, string anotherParam = "")
{
String append = (String.IsNullOrEmpty(anotherParam)) ? "" : " - " + anotherParam;
return string.Format("{0}.{1}.{2}{3}",
rk.Substring(0, 2).TrimStart('0'),
rk.Substring(2, 2).TrimStart('0').PadLeft(1, '0'),
rk.Substring(4, 2).TrimStart('0').PadLeft(1, '0'),
append);
}
因此,如果您致电:“ anotherParam”将被测试:
var a = GetTopic("010101");
为了您的界面定义:
public interface IUtilityService
{
string GetTopic(string rk, string suffix = "");
}
MSDN: http : //msdn.microsoft.com/de-de/library/dd264739.aspx
在C#4.0中,可以为参数提供默认值,因此使其成为可选值:
public string GetTopic(string rk, string param2 = "5")
{
return string.Format("{0}.{1}.{2}",
rk.Substring(0, 2).TrimStart('0'),
rk.Substring(2, 2).TrimStart('0').PadLeft(1, '0'),
rk.Substring(4, 2).TrimStart('0').PadLeft(1, '0'));
}
您可以使用params
关键字:
public string GetTopic(string rk, params options)
{
return string.Format("{0}.{1}.{2}",
rk.Substring(0, 2).TrimStart('0'),
rk.Substring(2, 2).TrimStart('0').PadLeft(1, '0'),
rk.Substring(4, 2).TrimStart('0').PadLeft(1, '0'));
}
这为您提供了一系列可选的参数。 这是参考链接 。
有可能的:
public string GetTopic(string rk,string lk = null)
{
if (lk!=null)
{ //with param logic
}
else
{ //without param logic
}
return string.Format("{0}.{1}.{2}",
rk.Substring(0, 2).TrimStart('0'),
rk.Substring(2, 2).TrimStart('0').PadLeft(1, '0'),
rk.Substring(4, 2).TrimStart('0').PadLeft(1, '0'));
}
您需要更改接口以使第二个参数可选:
public interface YourInterface
{
string GetTopic(String rk, String suffix = "");
}
然后,实现您的接口,再次指定可选参数:
public class YourClass : YourInterface
{
public string GetTopic(String rk, String suffix = "")
{
return string.Format("{0}.{1}.{2}{3}{4}",
rk.Substring(0, 2).TrimStart('0'),
rk.Substring(2, 2).TrimStart('0').PadLeft(1, '0'),
rk.Substring(4, 2).TrimStart('0').PadLeft(1, '0'),
string.IsNullOrWhiteSpace(suffix) ? "" : " - ",
suffix);
}
}
在以下情况下,有关使用可选参数的注意事项:请小心指定的默认值,因为将使用方法中调用的方法,取决于接口中定义的值或实现中定义的值。
例如,如果接口要定义suffix = ""
,而实现要定义suffix = null
:
YourInterface.GetTopic("010101")
将传递空字符串作为第二个参数,但是 YourClass.GetTopic("010101")
会改为传递null
! 可以在此博客文章中找到有关可能情况的良好概述。
您需要在界面中添加可选参数:
interface IInterface
{
string GetTopic(string one, string t = null);
}
class a : IInterface
{
public string GetTopic(string one, string t = null)
{
throw new NotImplementedException();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.