有没有办法让“破坏性”字符串方法像 Ruby 一样?
-
05-07-2019 - |
题
在 Ruby 中,更改对象的方法最终会产生爆炸: string.downcase!
在 C# 中你必须这样做: foo = foo.ToLower()
有没有办法制作如下扩展方法:
foo.ConvertToLower()
这会操纵 foo
?
(我认为答案是否定的,因为字符串是不可变的,你不能做 ref this
在扩展方法中。)
解决方案
不,你不能在扩展方法中这样做。要重新分配作为参数传入的变量的值,您必须使用 ref
参数修饰符通过引用传递它,扩展方法不允许这样做。
即使这是可能的,也可能没有可重新分配的变量,例如" foo" .ConvertToLower()
。
其他提示
改变字符串实例有两种方法:
- 反射
- 不安全代码
我不建议使用它们中的任何一个。您的开发人员同事将永远讨厌您 - 特别是如果该方法曾经用于更改恰好是文字的字符串......
您当然可以编写扩展方法来重新分配正在操作的字符串。例如:
public static void ConvertToLower(this string s)
{
s = s.ToLower();
}
这与字符串的不变性无关。
不隶属于 StackOverflow