我在界面中有以下内容:
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”。
这是可能的还是我需要制作两个功能并且一个重载另一个?如何在界面中指定可选的第二个参数?
答案 0 :(得分:3)
您可以设置默认值:
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");
对于你的interace-definition:
public interface IUtilityService
{
string GetTopic(string rk, string suffix = "");
}
答案 1 :(得分:2)
在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'));
}
答案 2 :(得分: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'));
}
这为您提供了一系列可选参数。这是一个参考link。
答案 3 :(得分: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'));
}
答案 4 :(得分: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
!可以找到in this blog post的可能案例的完整概述。
答案 5 :(得分:0)
您需要将可选参数添加到界面中:
interface IInterface
{
string GetTopic(string one, string t = null);
}
class a : IInterface
{
public string GetTopic(string one, string t = null)
{
throw new NotImplementedException();
}
}