12

引数を 1 つ取り、その引数を文字列の値に追加する文字列の拡張メソッドを作成しようとしています。これが私が望む動作です:

    public static void AddNumber(this string originalValue, string id)
    {
        List<string> ids = originalValue.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToString();
        ids.Add(id);
        string newValue = string.Join(",", ids);
        originalValue = newValue;
    }

次に、これを次のように使用したいと思います。

        string testing = "";
        testing.AddNumber("1"); // value should be 1
        testing.AddNumber("2"); // value should be 1,2
        testing.AddNumber("3"); // value should be 1,2,3

問題は、私がこれを見ているということです:

        string testing = "";
        testing.AddNumber("1"); // value is ""
        testing.AddNumber("2"); // value is ""
        testing.AddNumber("3"); // value is ""

今、私はこれを読みまし!問題はこちら StackOverflow で、私は同様のことをしていることを認識しています。文字列の値全体を置き換えることはできません。送信される文字列の内容を変更する必要があります...変更する方法が見つかりません。文字配列を変更しようとしましたが、うまくいきませんでした。何か案は?

4

3 に答える 3

21

文字列は不変です。
それは基本的に不可能です。

于 2012-08-23T20:38:59.680 に答える
7

これを実現するにはthis string originalValueasを渡す必要がありますがref、それは不可能です。ただし、通常の方法でこれを行うことができます。

public static void AddNumber(ref string originalValue, string id)

ただし、次のように呼び出す必要があります。

AddNumber(ref testing, "1");
于 2012-08-23T20:39:30.577 に答える
5

このメソッドを次のように使用する必要があります。

public static string AddNumber(this string originalValue, string id)
    {
        List<string> ids = originalValue.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToString();
        ids.Add(id);
        string newValue = string.Join(",", ids);
        return newValue;
    }

testing = testing.AddNumber("1");

しかし、あなたはこれを行うことができますStringBuilder:

public static void AddNumber(this StringBuilder builder, string id)
{
    var originalValue = builder.ToString();
    if (originalValue.EndsWith(",") || string.IsNullOrEmpty(originalValue))
         builder.Append(id);
    else
         builder.Append("," + id);
}

var testing = new StringBuilder();
testing.AddNumber("1");
testing.AddNumber("2");
testing.AddNumber("3");

アルゴリズムも変更しました。それほど効率的ではないようです。

于 2012-08-23T20:41:37.370 に答える