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

时间:2016-10-04 15:14:52

标签: c# extension-methods

我想尝试制作像

这样的东西
string s = "Hello";
s.Clear();

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

public static void Clear(this string s)
{
    s = string.Empty;
}

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

enter image description here

我无法使用参考输出,因为这些不能与关键字一起使用。有什么想法吗?

3 个答案:

答案 0 :(得分:11)

这是不可能的。 来自the documentation

  

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

答案 1 :(得分:1)

如果您正在寻找String可变版本,可以尝试使用StringBuilder

   StringBuilder s = new StringBuilder("Hello");
   s.Clear();

   ...

   String myFinalString = s.ToString(); 

答案 2 :(得分:0)

如果扩展方法检查条件,则可以将Action作为参数传递(调用者传递lambda表达式),以便仅在满足条件时才执行操作。这样,除非满足条件,否则你要避免对变量做任何事情(甚至将其设置为自身)。