0

Ruby では、オブジェクトを変更するメソッドの最後に感嘆符があります。string.downcase!

C# では、次のことを行う必要があります。foo = foo.ToLower()

次のような拡張メソッドを作成する方法はありますか:

foo.ConvertToLower()

それは操作しfooますか?

ref this(文字列は不変であり、拡張メソッドでa を実行できないため、答えはノーだと思います。)

4

3 に答える 3

3

文字列インスタンスを変更するには、次の 2 つの方法があります。

  • 反射
  • 安全でないコード

どちらも使用することはお勧めしません。あなたの仲間の開発者はあなたを永遠に憎むでしょう - 特にメソッドがたまたまリテラルである文字列を変更するために使用された場合...

于 2009-01-08T16:32:21.090 に答える
0

いいえ、拡張メソッドでこれを行うことはできません。パラメーターとして渡された変数の値を再割り当てするには、refパラメーター修飾子を使用して参照渡しする必要がありますが、これは拡張メソッドでは許可されていません。これが可能であったとしても、 のように再割り当てする変数がない可能性があります"foo".ConvertToLower()

于 2009-01-08T16:59:12.050 に答える
-3

操作対象の文字列を再割り当てする拡張メソッドを確実に作成できます。例えば:

public static void ConvertToLower(this string s)
{
   s = s.ToLower();
}

これは、文字列の不変性とは関係ありません。

于 2009-01-08T16:40:53.553 に答える