-2
("hello").Remove('e');

所以String.Remove有很多重载,其中之一是:String.Remove(int startIndex)

不知何故,我写的字符'e'被转换为 anint并且调用了 WRONG 重载函数。这是完全出乎意料的行为。我是否必须忍受这个,或者是否有可能提交一个错误,以便在(神圣的).NET 框架的下一个版本中得到纠正?

4

6 回答 6

8

String.Remove正好有2 个重载,它们都以 aint作为它们的第一个参数。

我相信您正在寻找String.Replace,如

string newString = "hello".Replace("e", string.Empty);
于 2013-02-13T13:35:14.113 回答
5

没有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", "");

我预测未来可能会出现字符串的不变性。祝你好运 ;-)

于 2013-02-13T13:34:13.260 回答
4

请查看方法的智能感知:它是:

    //
    // 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","");
于 2013-02-13T13:36:02.270 回答
2

Remove 将整数作为其参数,而不是字符。'e' 变成 101 作为 int。

于 2013-02-13T13:35:30.497 回答
2

你的问题是什么?

由于没有采用charas 参数的重载,因此您不能期望以'e'这种方式删除。

只需使用string.Replace(string, string).

于 2013-02-13T13:36:27.693 回答
1

string.Remove() 只有 2 个重载,其中一个接受 int 参数(并且没有一个接受 char 参数)。

字符可以轻松转换为整数。

因此 string.Remove(int) 被调用。

不是错误。:)

于 2013-02-13T13:36:35.520 回答