加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在C#中使用字符串正常工作?

发布时间:2020-12-15 23:43:42 所属栏目:百科 来源:网络整理
导读:我知道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 refe
我知道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
}

但这也创造了一个新的字符串……
有人可以告诉我,如果有办法做到这一点而不浪费每个动作的记忆?

解决方法

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

你错了,因为这通常是有问题的,或者是要避免的.

如果你的字符串是成千上万的字符,那么肯定,复制所有这些只是为了删除一些前导空格,或者在它的末尾添加几个字符(特别是在循环中),实际上可以是问题.

如果你的字符串不大,并且你没有对字符串执行很多(数千个)操作,那么你几乎肯定没有问题.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读