我有一个功能:
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, ")");
子字符串的结尾是&#34;)&#34;但我必须写-1我不能使用的因为第4个参数应该是int
或者像这样:
string in = "aaaaaaa(bbbbbb)";
string result = Substr(in, out result, "(", 6);
其中子字符串的结尾是&#34;之后的第6个字符(&#34;
如何将第四个参数设为int或string,以便我可以将其用作:
string result = Substr(in, out result, "(", ")");
我的灵感来自c#native函数,例如infexOf:
string i = "aaaaa(bbbb)";
int x = i.IndexOf("(", 3, StringComparison.Ordinal);
int y = i.IndexOf("(", StringComparison.Ordinal);
在这种情况下,第二个参数是int或StringComparison。
如何使编译器通过参数数据类型决定而不是期望参数的确切顺序? 请注意,我不是在寻找&#34;命名和可选参数&#34; https://msdn.microsoft.com/en-us/library/dd264739(v=vs.100).aspx
答案 0 :(得分:2)
如何让编译器按参数数据类型决定,而不是期望参数的确切顺序?
你不是。这是不可能的,甚至在许多情况下都不会起作用。
请注意,我不是在寻找&#34;命名和可选参数&#34;
如果必须,无论出于何种原因,请避免使用命名参数(请注意,您已经使用了可选参数),请继续进行多次重载:
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)
每个带有较少参数的重载只调用具有大多数参数的一个实现。