Ruby では、オブジェクトを変更するメソッドの最後に感嘆符があります。string.downcase!
C# では、次のことを行う必要があります。foo = foo.ToLower()
次のような拡張メソッドを作成する方法はありますか:
foo.ConvertToLower()
それは操作しfoo
ますか?
ref this
(文字列は不変であり、拡張メソッドでa を実行できないため、答えはノーだと思います。)
Ruby では、オブジェクトを変更するメソッドの最後に感嘆符があります。string.downcase!
C# では、次のことを行う必要があります。foo = foo.ToLower()
次のような拡張メソッドを作成する方法はありますか:
foo.ConvertToLower()
それは操作しfoo
ますか?
ref this
(文字列は不変であり、拡張メソッドでa を実行できないため、答えはノーだと思います。)
文字列インスタンスを変更するには、次の 2 つの方法があります。
どちらも使用することはお勧めしません。あなたの仲間の開発者はあなたを永遠に憎むでしょう - 特にメソッドがたまたまリテラルである文字列を変更するために使用された場合...
いいえ、拡張メソッドでこれを行うことはできません。パラメーターとして渡された変数の値を再割り当てするには、ref
パラメーター修飾子を使用して参照渡しする必要がありますが、これは拡張メソッドでは許可されていません。これが可能であったとしても、 のように再割り当てする変数がない可能性があります"foo".ConvertToLower()
。
操作対象の文字列を再割り当てする拡張メソッドを確実に作成できます。例えば:
public static void ConvertToLower(this string s)
{
s = s.ToLower();
}
これは、文字列の不変性とは関係ありません。