在 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();
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top