使用C#中的扩展方法更改值(如VB.NET中所允许)

Exe*_*boa 0 c# extension-methods

我想做点什么

string s = "Hello";
s.Clear();
Run Code Online (Sandbox Code Playgroud)

我创建了这样的扩展方法:

public static void Clear(this string s)
{
    s = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我看到价值时,它不会改变:

在此输入图像描述

我不能使用refout,因为这些不能与关键字this一起使用 .有任何想法吗?

Cri*_*scu 11

这是不可能的.从文档:

字符串是不可变的 - 在创建对象后,字符串对象的内容无法更改,尽管语法使其看起来好像可以执行此操作.例如,当您编写此代码时,编译器实际上会创建一个新的字符串对象来保存新的字符序列,并将该新对象分配给b.然后字符串"h"有资格进行垃圾回收.

  • @Alexander即使这是可能的,我也会远离这种魔法并使用`s = string.Empty`而不是调用它的扩展方法. (8认同)
  • 这不是关于可变性的,而是关于扩展方法如何限于值传递而不是通过引用传递的更多信息.OP不是试图改变刺痛,而是将变量重新分配给不同的引用. (4认同)