I found this on the official website of microsoft : "each character access walks the entire linked list of chunks to find the correct buffer to index into. " That was about accessing a char using [] , I know in most of the programming languages that I dealt with that accessing using [] is in O(1).
I opened the source code of the StringBuilder class to see how the characters are saved and I found that it is saved in an array of char (internal char[] m_ChunkChars;) , but what confused me is that the comment above the array says that the string is saved in the form of a linked list ( // A StringBuilder is internally represented as a linked list of blocks each of which holds // a chunk of the string. It turns out string as a whole can also be represented as just a chunk, // so that is what we do. )