Why does String.Clone() returns the original string and not a copy of it?

后端 未结 3 1386
轻奢々
轻奢々 2021-02-18 17:40

Surprisingly, String.Clone() doesn\'t return a copy of a string as String.Copy() would do. Instead, it returns \'this\', the original stri

3条回答
  •  后悔当初
    2021-02-18 18:38

    As has been mentioned, since strings are read-only, Clone() behaves reasonably. You virtually never actually need two separate instances of the string, and by not making a copy, memory is saved. In the very rare case that you actually need a copy (for some reason you want Object.ReferenceEquals to return false), you can use String.Copy() instead.

    It may seem pointless to have a method that just returns this. The reason to have such a method is to implement ICloneable, and I agree that String should implement ICloneable so that generic code like

    T Foo(T x, ...) where T:ICloneable {/* code that might clone x*/}
    

    can be compatible with String.

    It's a little strange to me that the method is public, though, since there's no reason to call it directly. It would make sense if it were only accessible through a reference to ICloneable.

提交回复
热议问题