有没有办法让“破坏性”字符串方法成为Ruby?

时间:2009-01-08 16:29:11

标签: c# string extension-methods

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

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

有没有办法制作像:

这样的扩展方法

foo.ConvertToLower()

会操纵foo

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

3 个答案:

答案 0 :(得分:3)

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

  • 反射
  • 不安全的代码

我不建议使用它们中的任何一个。你的开发人员会永远讨厌你 - 特别是如果这个方法曾被用来改变一个恰好是文字的字符串......

答案 1 :(得分:0)

不,你不能在扩展方法中这样做。要重新分配作为参数传入的变量的值,您必须使用ref参数修饰符通过引用传递它,扩展方法不允许这样做。 即使这是可能的,也可能没有可重新分配的变量,例如在"foo".ConvertToLower()中。

答案 2 :(得分:-3)

您当然可以编写扩展方法来重新分配正在操作的字符串。例如:

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

这与字符串的不变性无关。