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

そのString.Removeため、多くのオーバーロードがあり、そのうちの 1 つが次のとおりです。String.Remove(int startIndex)

どういうわけか、私が書いた文字'e'がに変換されint、間違ったオーバーロードされた関数が呼び出されます。これはまったく予想外の動作です。私はこれと一緒に暮らす必要がありますか、それともバグを報告して、(神聖な) .NET フレームワークの次のバージョンで修正される可能性はありますか?

4

6 に答える 6

8

String.Removeには正確に2 つのオーバーロードがあり、どちらもint最初のパラメーターとして an を取ります。

次のように、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暗黙的ににキャストできるintため、あなたの場合はそうです。ただし、実際には文字は削除されません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 は、char ではなく整数をパラメーターとして取ります。'e' は int として 101 に変換されます。

于 2013-02-13T13:35:30.497 に答える
2

あなたの質問は何ですか?

as パラメーターを取るオーバーロードがないため、この方法charで削除することは期待できません'e'

を使用するだけstring.Replace(string, string)です。

于 2013-02-13T13:36:27.693 に答える
1

string.Remove() には 2 つのオーバーロードしかなく、そのうちの 1 つは int パラメーターを受け入れます (いずれも char パラメーターを受け入れません)。

Char は簡単に int に変換できます。

したがって、string.Remove(int) が呼び出されます。

バグではありません。:)

于 2013-02-13T13:36:35.520 に答える