无法获取子字符串然后修剪变量

时间:2012-01-06 16:20:12

标签: c#

我收到以下错误:

var a = id.Substring(0,8).TrimEnd("0").Length

我想要做的是把我的字符串称为id。将其固定为八个字符,然后在取消尾随“0”后检查长度。

错误消息是:

Error   2   The best overloaded method match for 'string.TrimEnd(params char[])' has some invalid arguments

我看不出我做错了什么。有人有什么想法吗?

6 个答案:

答案 0 :(得分:4)

您所做的是错误的,因为您将.TrimEnd()方法传递给字符串,而不是char[] as the documentation mentions

您需要以下内容:

var a = id.Substring(0,8).TrimEnd(new char[]{'0'}).Length;

你甚至可以传入一个带引号的字符,使事情更具可读性。

var a = id.Substring(0,8).TrimEnd('0').Length;

答案 1 :(得分:1)

这与Substring电话无关。这也不起作用:

// Broken
"foo".TrimEnd("0");

查看编译器错误消息 - 这将起作用:

"foo".TrimEnd('0');

如果您关注微优化,可能希望避免在每次调用时创建新数组:

private static readonly char[] ZeroForTrimming = {'0'};

...

var a = id.Substring(0,8).TrimEnd(ZeroForTrimming).Length;

答案 2 :(得分:0)

尝试围绕0的单引号:

var a = id.Substring(0, 8).TrimEnd('0').Length;

答案 3 :(得分:0)

正是它所说的,该方法需要char []而不是字符串。你最容易写

var a = id.Substring(0,8).TrimEnd("0".ToCharArray()).Length;

我添加了ToCharArray,因为有时您可能希望字符串是可变的。

请注意,除非您确定该字符串总是至少8个字符,否则您会遇到麻烦。您需要验证字符串至少与Substring的第二个参数一样长,否则您很可能会在随机时间将索引抛出范围异常。

答案 4 :(得分:0)

方法签名显示它需要任意数量的char。您提供了string。有关该方法的文档,请参阅here

相反,你需要这样的东西:

var a = id.Substring(0, 8).TrimEnd('0').Length

请注意字符周围的单引号。

答案 5 :(得分:0)

TrimEnd需要一个char数组,而不是字符串。使用单引号将char字面值写为'x'

var a = id.Substring(0,8).TrimEnd('0').Length;

由于TrimEnd的参数标有params关键字,因此您有两种传递参数的可能性:

s.TrimEnd(new char[]{'0',' ',';'})

s.TrimEnd('0',' ',';')

在您的情况下,这就足够了:

s.TrimEnd('0')