C#修剪结束修剪过多的木炭

C#修剪结束修剪过多的木炭,c#,C#,使用string.TrimEnd()方法时,我看到了奇怪的结果 产生 FDLBicester. 但是,稍微更改装饰件,使其也包括: var s = "FDLBicester.freshviprint01"; var x = s.TrimEnd(".freshviprint01".ToCharArray()); Console.WriteLine(x); 产生 FDLBic 为什么同时修剪,我会丢失ester?修剪()将修剪传递给它的所有字符 当您没有通过时,修剪停止在那里,因为不在要修剪的字

使用string.TrimEnd()方法时,我看到了奇怪的结果

产生

FDLBicester.

但是,稍微更改装饰件,使其也包括

var s = "FDLBicester.freshviprint01";
var x = s.TrimEnd(".freshviprint01".ToCharArray());
Console.WriteLine(x);
产生

FDLBic

为什么同时修剪
,我会丢失
ester

修剪()
将修剪传递给它的所有字符

当您没有通过
时,修剪停止在那里,因为
不在要修剪的字符列表中


当您传递
时,它就在要修剪的字符列表中,在它前面还有其他几个字符(即
e
s
t
r
),因此也会被修剪。

TrimEnd
从传递的修剪数组的末端修剪每个字符,并重复此操作,直到字符串的最后一个字符不是数组的一部分

var s = "FDLBicester.freshviprint01";
var x = s.TrimEnd(".freshviprint01".ToCharArray());
cester.freshviprint01
中的字符都是trim数组的一部分,这就是它们被删除的原因。它们的传递顺序无关紧要

var x = s.TrimEnd(".01efihnprstv".ToCharArray()); 

将产生相同的结果。

函数将从字符串末尾删除任何
char
s。它与完整字符串不匹配

请尝试以下方法:

var s = "FDLBicester.freshviprint01";
var t = ".freshviprint01";

var x =
    s.Length > t.Length && s.Substring(s.Length - t.Length) == t
        ? s.Substring(0, s.Length - t.Length) 
        : s;

Console.WriteLine(x);
甚至这个:

var x = s.Split(new [] { t }, StringSplitOptions.None)[0];
当你把

  var x = s.TrimEnd(".freshviprint01".ToCharArray());
实际上,您希望删除
{.','0','1','e','f','h','i','i','n','p','r','r','s','t','v'}
集中的所有尾随字符(
c
i是不在该集中的第一个字符):

请注意,
icester
中的所有字符都显示在集合中,这就是为什么会被删除的原因。您可能想删除一些后缀,如:

  var s = "FDLBicester.freshviprint01";
  var suffix = ".freshviprint01";

  var x = s.EndsWith(suffix) 
    ? s.Substring(0, s.Length - suffix.Length) 
    : s;

阅读此处-备注根据文档,检查@pitersmx提供的链接,换句话说
“aaabbb.b”。TrimEnd(“.b”.ToCharArray())
将导致
aaa
,因为
b
包含在
.b
中。您应该使用子字符串而不是TrimEnd
  "FDLBicester.freshviprint01" -> "FDLBic"
  var s = "FDLBicester.freshviprint01";
  var suffix = ".freshviprint01";

  var x = s.EndsWith(suffix) 
    ? s.Substring(0, s.Length - suffix.Length) 
    : s;