我今天正在研究一个文本文件导入器,我厌倦了使用普通的Substring(startIndex,length)方法。我喜欢用星期五来学习新东西或想办法做新事情,所以我编写了自己的扩展,取而代之的是两个索引,因为我觉得更容易在脑海中形象化。
我最终得到了类似的东西:
public static string SubstringIx(this string value, int startIndex, int endIndex)
{
if (value == null) throw new ArgumentNullException();
if (endIndex > value.Length) throw new IndexOutOfRangeException("End index must be less than or equal to the length of the string.");
if (startIndex < 0 || startIndex > value.Length + 1 ) throw new IndexOutOfRangeException("Start index must be between zero and the length of the string minus one");
if (startIndex >= endIndex) throw new ArgumentOutOfRangeException("Start index must be less then end index");
var length = endIndex - startIndex;
return value.Substring(startIndex, length);
}
我的问题是,是否有一个潜在的原因,我们只给出了Substring(startIndex,length)选项,而不是类似于Substring(startIndex,endIndex)?
我喜欢替代方法的一个方面是,在挑选输入行的片段时,最后一个endIndex是下一个startIndex,因此很容易“看到”正在发生的事情:
var searchString = "ABC";
var a = searchString.SubstringIx(0, 1);
var b = searchString.SubstringIx(1, 2);
var c = searchString.SubstringIx(2, 3);
也许是一个更好的例子,我认为startIndex,endIndex让它更容易阅读,因为我认为我没有明确这一部分。考虑以下两个选项:
var searchString = GetInputLine();
var a = searchString.SubstringIx(0, 35);
var b = searchString.SubstringIx(35, 60);
var c = searchString.SubstringIx(60, 112);
var d = searchString.Substring(0, 35);
var e = searchString.Substring(35, 25);
var f = searchString.Substring(60, 52);
就个人而言,我发现第一个例子更容易阅读。
答案 0 :(得分:2)
指定一维子集有两种合理的方法:
没有理由为什么其中一个应该“更好”,主要是品味问题。
答案 1 :(得分:1)
其他语言使用此方法。特别是: java.lang.StringBuilder.substring(int start,int end) 来自MSDN不少 - https://msdn.microsoft.com/en-US/library/aa988974%28v=vs.80%29.aspx
这似乎是完成同样事情的完美合理方式。