在Ruby中,改变对象的方法最后有一个方面:string.downcase!
在c#中你必须这样做:foo = foo.ToLower()
有没有办法制作像:
这样的扩展方法 foo.ConvertToLower()
会操纵foo
?
(我认为答案是否定的,因为字符串是不可变的,你不能在扩展方法中做ref this
。)
答案 0 :(得分:3)
有两种方法可以改变字符串实例:
我不建议使用它们中的任何一个。你的开发人员会永远讨厌你 - 特别是如果这个方法曾被用来改变一个恰好是文字的字符串......
答案 1 :(得分:0)
不,你不能在扩展方法中这样做。要重新分配作为参数传入的变量的值,您必须使用ref
参数修饰符通过引用传递它,扩展方法不允许这样做。
即使这是可能的,也可能没有可重新分配的变量,例如在"foo".ConvertToLower()
中。
答案 2 :(得分:-3)
您当然可以编写扩展方法来重新分配正在操作的字符串。例如:
public static void ConvertToLower(this string s)
{
s = s.ToLower();
}
这与字符串的不变性无关。