【问题标题】:variable order of parameters in function函数中参数的可变顺序
【发布时间】:2016-10-04 09:46:34
【问题描述】:

我有一个函数:

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 我不使用因为第四个参数应该是 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/en-us/library/dd264739(v=vs.100).aspx

【问题讨论】:

    标签: c# variables parameters optional-parameters


    【解决方案1】:

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

    你没有。这是不可能的,甚至在很多情况下都行不通。

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

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

    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)
    

    每个参数较少的重载只调用一个参数最多的实现。

    【讨论】:

    • 重载就是答案。我现在看到它是如何工作的。感谢您的解释。迪基!
    猜你喜欢
    • 2013-04-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多