("hello").Remove('e');
所以String.Remove
有很多重载,其中之一是:String.Remove(int startIndex)
不知何故,我写的字符'e'
被转换为 anint
并且调用了 WRONG 重载函数。这是完全出乎意料的行为。我是否必须忍受这个,或者是否有可能提交一个错误,以便在(神圣的).NET 框架的下一个版本中得到纠正?
("hello").Remove('e');
所以String.Remove
有很多重载,其中之一是:String.Remove(int startIndex)
不知何故,我写的字符'e'
被转换为 anint
并且调用了 WRONG 重载函数。这是完全出乎意料的行为。我是否必须忍受这个,或者是否有可能提交一个错误,以便在(神圣的).NET 框架的下一个版本中得到纠正?
String.Remove正好有2 个重载,它们都以 aint
作为它们的第一个参数。
我相信您正在寻找String.Replace,如
string newString = "hello".Replace("e", string.Empty);
没有Remove
一种方法需要char
...
http://msdn.microsoft.com/en-us/library/143t8z3d.aspx
但是,char
可以隐式转换为 a int
,因此在您的情况下是这样。但它实际上不会删除 letter e
,而是删除 index 处的字符(int)'e'
(在您的情况下,这将在运行时超出范围)。
如果要“删除”字母e
,则:
var newString = "Hello".Replace("e", "");
我预测未来可能会出现字符串的不变性。祝你好运 ;-)
请查看方法的智能感知:它是:
//
// Summary:
// Returns a new string in which all the characters in the current instance,
// beginning at a specified position and continuing through the last position,
// have been deleted.
//
// Parameters:
// startIndex:
// The zero-based position to begin deleting characters.
//
// Returns:
// A new string that is equivalent to this string except for the removed characters.
//
// Exceptions:
// System.ArgumentOutOfRangeException:
// startIndex is less than zero.-or- startIndex specifies a position that is
// not within this string.
public string Remove(int startIndex);
它照它说的去做;这不是你想要的方法。你想要的是:
string s = "hello".Replace("e","");
Remove 将整数作为其参数,而不是字符。'e' 变成 101 作为 int。
你的问题是什么?
由于没有采用char
as 参数的重载,因此您不能期望以'e'
这种方式删除。
只需使用string.Replace(string, string)
.
string.Remove() 只有 2 个重载,其中一个接受 int 参数(并且没有一个接受 char 参数)。
字符可以轻松转换为整数。
因此 string.Remove(int) 被调用。
不是错误。:)