C#string.Substring()或string.Remove()

时间:2015-12-09 20:04:52

标签: c# string substring

我想知道使用它是否是更好的做法:

var a = b.Substring(6);  

var a = b.Remove(0,6);  

哪一个更有效/更快?显然substring有更多的选项你可以选择,但没有删除()不能做..抱歉,如果它的新手问题,我是C#的新手

3 个答案:

答案 0 :(得分:4)

使用反射器查看代码,InternalSubString只执行一个wstrcpy,而Remove正在执行其中两个。我的猜测是第一个更快一点。

以下是字符串类的Remove方法的代码:

public unsafe string Remove(int startIndex, int count)
{
...
        string text = string.FastAllocateString(num);

        fixed (char* ptr = &this.m_firstChar)
        {
            fixed (char* ptr2 = &text.m_firstChar)
            {
                string.wstrcpy(ptr2, ptr, startIndex);
                string.wstrcpy(ptr2 + (IntPtr)startIndex, ptr + (IntPtr)startIndex + (IntPtr)count, num - startIndex);
            }
        }
}

SubString方法调用的代码:

private unsafe string InternalSubString(int startIndex, int length)
{
    string text = string.FastAllocateString(length);
    fixed (char* ptr = &text.m_firstChar)
    {
        fixed (char* ptr2 = &this.m_firstChar)
        {
            string.wstrcpy(ptr, ptr2 + (IntPtr)startIndex, length);
        }
    }
    return text;
}

答案 1 :(得分:1)

根据这篇文章,子字符串更快:

Fastest way to remove first char in a string

“我现在通过调用每个人大约90000000进行检查,我得到以下结果:删除:06.63 - TrimStart:04.71 - subString:03.09所以从结果子串是最好的” - @Amr Badawy

答案 2 :(得分:0)

字符串实例是不可变的 - 如果返回值不同,则Substring()和Remove()将分配新字符串,如果不是,则返回相同的字符串,如本例所示。子串更好地反映了意图,应该是首选 - 几乎总是,最好让代码易于理解,而不是担心微小的性能差异。