0

我在界面中有以下内容:

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”。

这可能吗,还是我需要创建两个函数并让一个重载另一个?如何在我的界面中指定可选的第二个参数?

4

6 回答 6

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");

对于您的交互定义:

public interface IUtilityService 
{ 
    string GetTopic(string rk, string suffix = ""); 
} 

MSDN:http: //msdn.microsoft.com/de-de/library/dd264739.aspx

于 2012-07-07T09:17:15.963 回答
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'));
}
于 2012-07-07T09:17:10.963 回答
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'));
}

这为您提供了一系列可选参数。这是一个参考链接

于 2012-07-07T09:17:01.753 回答
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'));
}
于 2012-07-07T09:17:58.210 回答
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

可以在此博客文章中找到对可能情况的一个很好的概述。

于 2012-07-07T09:33:26.633 回答
0

您需要将可选参数添加到界面中:

 interface IInterface
    {
        string GetTopic(string one, string t = null);
    }

    class a : IInterface
    {
        public string GetTopic(string one, string t = null)
        {
            throw new NotImplementedException();
        }
    }
于 2012-07-07T09:33:55.527 回答