我最近尝试在 c# 中执行以下操作
string str = "u r awesome";
str[0]="i";
而且它不会工作,因为显然 str[i] 只是一个 get 而不是一个 set,所以我想知道 string 的底层实现是什么会强制 str[i] 只是一个 get。
它不只是一个 char * 的托管包装器吗?那么为什么我不能设置 str[i]?
最佳答案
您不能设置字符串的字符,因为 .NET String
类是不可变的 -- 这意味着它的内容在创建后不能更改。这允许多次安全地使用同一个字符串实例,而无需一个对象担心另一个对象会破坏它的字符串。
如果您需要一个允许您操作字符串的可变类,请考虑使用 StringBuilder
相反。
如果要与 C 进行比较,String
类型类似于 const char *
除了你不能只是抛弃常量。 StringBuilder
更像是一个char *
(自动调整分配大小)并使用方法( ToString()
)创建一个新的,独立的 String
从它的内容实例。
关于c# - System.String底层实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990466/