c# - System.String底层实现

标签 c# .net string

我最近尝试在 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/

相关文章:

c# - EF核心: The instance of entity type cannot be tracked and context dependency injection

.net - 如何调试.net垃圾回收?

c# - 是否可以构建一个二叉树并跟踪中位数,仍然使用 O(log(n)) 插入?

Objective-C:const char* 字符串损坏:发生了什么事?

c# - IE 中的 ASP.NET 闪烁

c# - 有没有办法从 C# Selenium 测试中删除 HttpOnly cookie?

c# - 绑定(bind)到 getter 属性时,Xamarin IsVisible 不会动态更新

.net - 使用带有数组参数的 Thread.VolatileWrite()

c - 从 fgets() 输入中删除尾随换行符

c - 为什么我会收到此错误以及如何修复它 : munmap_chunk(): invalid pointer: 0x0000000000400694 *** Hello WorldAborted