考虑以下代码:
var x = "tesx".Remove('x');
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码,我会得到以下异常:
startIndex必须小于string的长度.
为什么我可以将char而不是int传递给此方法?为什么我没有收到编译错误?

为什么编译器有这种行为?
Mic*_*haC 93
你试图删除'x',它被声明为char,x等于120
在.Remove只需要2个参数类型的int开始和(可选)计数,以从字符串中删除.
如果传递char,它将转换为整数表示.意思是如果你传递'x' - > 120比字符串大.Length,这就是为什么它会抛出这个错误!
Roh*_*ats 27
Implicit conversion允许您编译此代码,因为char可以转换为int,并且不需要显式转换.这也将编译,答案将是600 (120*5)-
char c = 'x';
int i = c;
int j = 5;
int answer = i * j;
Run Code Online (Sandbox Code Playgroud)
从MSDN,隐式转换总结如下 -

正如其他人所说,您可以使用Replace或Remove使用有效输入.
Guf*_*ffa 21
没有重载Remove需要a char,因此字符被隐式转换为a,int并且该Remove方法尝试将其用作字符串的索引,这是字符串之外的方式.这就是为什么你得到运行时错误而不是编译时错误,说参数类型错误.
要用于Remove删除字符串的一部分,首先需要找到字符串中该部分的位置.例:
var x = "tesx";
var x = x.Remove(x.IndexOf('x'), 1);
Run Code Online (Sandbox Code Playgroud)
这将删除'x'字符串中的第一次出现.如果可能有多个出现,并且您想要删除所有,则使用Replace效率更高:
var x = "tesx".Replace("x", String.Empty);
Run Code Online (Sandbox Code Playgroud)
Remove为字符串中的索引获取一个int参数以开始删除字符,请参阅msdn.remove调用必须自动将char转换为其ASCII整数索引并尝试从字符串中删除该索引处的字符,它不会尝试删除该字符本身.
如果您只想删除字符串中出现x的任何情况,请执行以下操作:
"testx".Replace("x",string.Empty);
Run Code Online (Sandbox Code Playgroud)
如果要删除字符串中x的第一个索引,请执行以下操作:
var value = "testx1x2";
var newValue = value.Remove(value.IndexOf('x'), 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12269 次 |
| 最近记录: |