函数中参数的可变顺序

LukAss741

我有一个功能:

public static bool Substr(string source, out string output, string begining, int length = -1, string end = null)
{
    output = "";
    int start_;
    if ((start_ = source.IndexOf(begining, StringComparison.Ordinal)) != -1)
    {
        start_ += begining.Length;
        if (length != -1)
        {
            if (start_ +length <= source.Length)
            {
                output = source.Substring(start_, length);
                return true;
            }
        }else{
            int end_;
            if ((end_ = source.IndexOf(end, start_, StringComparison.Ordinal)) != -1)
            {
                output = source.Substring(start_, end_ -start_);
                return true;
            }
        }
    }
    return false;
}

我目前用作:

string in = "aaaaaaa(bbbbbb)";
string result = Substr(in, out result, "(", -1, ")");

子字符串的结尾是“)”,但是我必须写-1,因为第4个参数应该是int,所以我不使用它

或像这样:

string in = "aaaaaaa(bbbbbb)";
string result = Substr(in, out result, "(", 6);

其中子字符串的结尾是“(”之后的第6个字符

我怎样才能使第4个参数为int或string,所以我可以将其用作:

string result = Substr(in, out result, "(", ")");

我的灵感来自c#本机函数,例如infexOf:

string i = "aaaaa(bbbb)";
int x = i.IndexOf("(", 3, StringComparison.Ordinal);
int y = i.IndexOf("(", StringComparison.Ordinal);

在这种情况下,第二个参数是int或StringComparison。

如何使编译器根据参数数据类型决定而不是期望参数的确切顺序?请注意,我不是在寻找“命名和可选参数” https://msdn.microsoft.com/zh-cn/library/dd264739(v=vs.100).aspx

昂德里·图尼(Ondrej Tucny)

如何使编译器根据参数数据类型决定而不是期望参数的确切顺序?

你不知道 这只是不可能的,甚至在许多情况下也不起作用。

请注意,我不是在寻找“命名和可选参数”

如果由于某种原因必须避免使用命名参数(请注意,无论如何您已经在使用可选参数),请进行多次重载:

public static bool Substr(string source, out string output, string begining, int length, string end)
public static bool Substr(string source, out string output, string begining, string end)
public static bool Substr(string source, out string output, string begining, int length)
public static bool Substr(string source, out string output, string begining)

每个带有较少参数的重载仅调用具有大多数参数的一个实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章