应该使用mid和instr,还是indexof和substring?

xpd*_*pda 5 vb.net

一些VB字符串函数有System.String类似的方法,如midsubstring,instrindexof.是否有充分的理由使用其中一种?

Ste*_*eve 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);
}
Run Code Online (Sandbox Code Playgroud)

在他们所谓的子字符串中的一天结束....
故事几乎就是一个比较复杂的Instragains IndexOf,因为你可以使用一个比较参数,而且在这种情况下,在Microsoft.VisualBasic程序使用的内部代码兼容性(粗体是我的)库再次落入.NET Framework提供的基本方法中.

当然,如果你只需要维护一个从VB6开始的旧程序,那么使用这些方法是绝对正确的.相反,如果您计划继续演进程序或构建新程序,我建议尽快切换到.NET Framework核心方法.


N0A*_*ias 5

我想说你应该使用Mid()Instr()因为我们中的一些人多年来一直在使用这些功能,但我建议不要使用这些功能.主要是因为便携式目标平台(如Xbox和Windows Phone)不支持它们.对我而言,这表明他们将比以后更快地弃用.我也读过.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
Run Code Online (Sandbox Code Playgroud)

因此,如果要将代码移植到.Net版本,请务必小心.