gpt4 book ai didi

c# - 如何在 C# 中正确处理字符串?

转载 作者:行者123 更新时间:2023-11-30 13:31:10 25 4
gpt4 key购买 nike

我知道在 C# 中有一条关于字符串的规则:

When we create a textual string of type string, we can never change its value! When putting different value for a string variable thje first string will stay in memory and variable (which is kind of reference type) just gets the address of the new string.

所以做这样的事情:

string a = "aaa";
a = a.Trim(); // Creates a new string

不推荐。但是,如果我需要根据用户偏好对字符串执行一些操作,该怎么办,如下所示:

string a = "aaa";
if (doTrim)
a = a.Trim();
if (doSubstring)
a = a.Substring(...);

etc...

如果不在每个操作上都创建新字符串,我该怎么做?我想通过 ref 将字符串发送到函数,如下所示:

void DoTrim(ref string value)
{
value = value.Trim(); // also creates new string
}

但这也创建了一个新的字符串...有人可以告诉我是否有一种方法可以做到这一点而不会在每个 Action 上浪费内存?

最佳答案

您是正确的,因为您正在执行的操作是创建新字符串,而不是改变单个字符串。

你是不正确的,因为这通常是有问题的或需要避免的事情。

如果您的字符串有数十万个字符,那么当然,复制所有这些字符只是为了删除几个前导空格,或者在它的末尾添加几个字符(重复,特别是在一个循环中)可以实际上是个问题。

如果您的字符串不大,并且您没有对字符串执行许多(以数千计)操作,那么您几乎可以肯定没有问题。

现在有少数上下文(通常很少见)确实遇到字符串操作问题。可能最常见的有问题的上下文是将一堆字符串附加在一起,因为这样做意味着为每个新添加复制所有先前附加的数据。如果您处于这种情况,请考虑使用类似 StringBuilder 的东西或对 string.Concat 的单个调用(接受要连接的字符串序列的重载)来执行此操作.

例如,其他上下文是处理 DNA 链的程序。他们通常会采用数百万个字符的字符串,并创建该字符串的数十万个字符长的子字符串。因此,使用标准 C# 字符串操作会导致很多 不必要的复制。编写此类程序的人最终会创建可以表示另一个字符串的子字符串的对象,无需复制数据,而是使用偏移量引用现有字符串的基础数据源。

关于c# - 如何在 C# 中正确处理字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23892780/

25 4 0
文章推荐: C# 在关闭应用程序后打开文件
文章推荐: javascript - 使用 javascript 知道最接近的选择器后,选择下一个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com