在 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。)
有两种方法可以改变字符串实例:
我不建议使用它们中的任何一个。你的开发人员会永远恨你 - 特别是如果该方法曾经用于更改恰好是文字的字符串......
不,您不能在扩展方法中执行此操作。要重新分配作为参数传入的变量的值,您必须使用ref
参数修饰符通过引用传递它,扩展方法不允许这样做。即使这是可能的,也可能没有要重新分配的变量,例如在"foo".ConvertToLower()
.
您当然可以编写一个扩展方法来重新分配正在操作的字符串。例如:
public static void ConvertToLower(this string s)
{
s = s.ToLower();
}
这与字符串的不变性无关。