某些VB字符串函数在System.String中具有类似的方法,例如mid
和substring
,instr
和indexof
。是否有充分的理由使用其中一种?
答案 0 :(得分:10)
一个例子可以解释很多。这是来自Microsoft.VisualBasic的Mid的源代码
public static string Mid(string str, int Start, int Length)
{
if (Start <= 0)
{
throw new ArgumentException(Utils.GetResourceString("Argument_GTZero1", new string[] { "Start" }));
}
if (Length < 0)
{
throw new ArgumentException(Utils.GetResourceString("Argument_GEZero1", new string[] { "Length" }));
}
if ((Length == 0) || (str == null))
{
return "";
}
int length = str.Length;
if (Start > length)
{
return "";
}
if ((Start + Length) > length)
{
return str.Substring(Start - 1);
}
return str.Substring(Start - 1, Length);
}
在一天结束时,他们调用Substring ....
Instr
再次IndexOf
的故事稍微复杂一些,因为您可以使用比较参数,但在这种情况下,Microsoft.VisualBasic中使用的内部代码兼容性(粗体)是我的)库再次落入.NET Framework提供的基本方法中。
当然,如果你只需要维护一个从VB6开始的旧程序,那么使用这些方法是绝对正确的。相反,如果您计划继续演进程序或构建新程序,我建议尽快切换到.NET Framework核心方法。
答案 1 :(得分:5)
我想说你应该使用Mid()
或Instr()
,因为我们中的一些人多年来一直在使用这些功能,但我建议不要使用这些功能。主要是因为便携式目标平台(如Xbox和Windows Phone)do not support them。对我而言,这表明他们将比以后更快地弃用。我也读过.Net版本似乎表现更好,但现在找不到支持该声明的任何统计数据。
另一个有趣的注意事项是Trim()
函数处理断行的方式不同。示例代码:
Dim strTest As String = ControlChars.NewLine ' OR Environment.NewLine OR vbNewLine
Dim oldLength As Integer = Len(Trim(strTest)) '2
Dim newLength As Integer = strTest.Trim().Length '0
如果您将代码移植到.Net版本,请务必小心。
答案 2 :(得分:2)
我通常喜欢使用System.String的原因是它与其他语言更兼容。如果使用c#以及VB,那么坚持使用System.String就不那么容易了。还有许多System.String函数,它们不是AFAIK在Microsoft.VisualBasic中的等价物,例如EndsWith,使用混合物有点奇怪。 VB用于兼容现在很古老的VB6等。
但是 - 我确实有时喜欢VB版本更容错的事实。 Steve发布的Mid示例显示,Mid会在使用Substring抛出异常的情况下返回“”。与其他一些人存在类似的差异。我发现过去非常有用;在调用Substring之前,你最终可以自己编写这些检查。这也意味着使用旧的VB样式命令编辑代码到System.String可能会引入一些意外的异常。我在一个以VB5开始的项目上工作,并且我学会了很快就没有理由更换旧版本的VB。