当被要求修剪"PRN.NUL"时,为什么TrimStart会更多地修剪一个字符?

Jam*_*mes 2 .net c#

这是代码:

namespace TrimTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string ToTrim = "PRN.NUL";
            Console.WriteLine(ToTrim);
            string Trimmed = ToTrim.TrimStart("PRN.".ToCharArray());
            Console.WriteLine(Trimmed);
            ToTrim = "PRN.AUX";
            Console.WriteLine(ToTrim);
            Trimmed = ToTrim.TrimStart("PRN.".ToCharArray());
            Console.WriteLine(Trimmed);
            ToTrim = "AUX.NUL";
            Console.WriteLine(ToTrim);
            Trimmed = ToTrim.TrimStart("AUX.".ToCharArray());
            Console.WriteLine(Trimmed);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

PRN.NUL

UL

PRN.AUX

AUX

AUX.NUL

NUL

如您所见,TrimStart从NUL中取出了N. 但即使从PRN开始,它也不会对其他字符串这样做.

我尝试使用.NET Framework 3.5和4.0,结果是一样的.是否有任何解释导致这种行为的原因?

Mat*_*nen 10

String.TrimStart适用于角色级别.你正在做的是告诉它删除任何"P","R","N"或".".从一开始的字符 - 因此点后面的前N也被删除.

如果要从字符串的开头删除某个字符串,首先使用StartsWith确保它在那里,然后使用Substring来获取字符串的正确部分.