我想尝试制作像
这样的东西string s = "Hello";
s.Clear();
我创建了这样的扩展方法:
public static void Clear(this string s)
{
s = string.Empty;
}
但是,当我看到值时,它不会改变:
我无法使用参考或输出,因为这些不能与关键字此一起使用。有什么想法吗?
答案 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表达式),以便仅在满足条件时才执行操作。这样,除非满足条件,否则你要避免对变量做任何事情(甚至将其设置为自身)。