0

在 Ruby 中,改变对象的方法最后会有一个爆炸:string.downcase!

在 c# 中,你必须这样做:foo = foo.ToLower()

有没有办法制作一个扩展方法,如:

foo.ConvertToLower()

那会操纵foo吗?

(我认为答案是否定的,因为字符串是不可变的,你不能ref this在扩展方法中做 a。)

4

3 回答 3

3

有两种方法可以改变字符串实例:

  • 反射
  • 不安全的代码

我不建议使用它们中的任何一个。你的开发人员会永远恨你 - 特别是如果该方法曾经用于更改恰好是文字的字符串......

于 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 回答