2009-01-08 47 views
0

在Ruby中,方法这改变物体对最终轰然:string.downcase!有没有办法使“破坏性”字符串方法a-la Ruby?

在C#中,你必须做的:foo = foo.ToLower()

有没有一种方法,使像一个扩展方法:

foo.ConvertToLower()

那会操纵foo

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

回答

0

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

3

有变异String实例的两种方式:

  • 思考
  • 不安全的代码

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

+0

没错,但我可以重新分配一个字符串变量。我只想要一个扩展方法来为我做。 – brendanjerwin 2009-01-08 16:33:54

+0

你不能那样做。如果你称为“Foo”,那么你会发生什么?ConvertToLower()?即使你可以,我也不会 - 这将是非常不明显的代码来阅读。 – 2009-01-08 17:07:50

-3

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

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

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

相关问题