【发布时间】:2014-03-02 01:59:47
【问题描述】:
我需要遍历一个字符串数组,并知道我以前是否见过一个特定的字符串值。通常,我会用其他语言写这样的东西:
String oldValue="";
String newValue;
for (i=0;i<myarray.Length;i++)
{
newValue=myarray[i];
if (oldValue==newValue)
break;
...
oldValue=newValue;
}
但是,这在 C# 中不起作用,因为字符串是不可变的。如果我只是替换整个字符串,看起来我可以使用正则表达式来做到这一点,但这似乎是额外的开销。以前其他人是如何处理的?
谢谢
【问题讨论】:
-
字符串是不可变的,但您仍然可以将变量分配给新值。您可以发布一个完整的代码示例来演示您遇到的问题吗? (如果有,请参阅上面格兰特的评论;你在哪里分配了
newValue?显然这不是一个完整的程序;它不会按原样编译。) -
看起来你并没有真正尝试过
-
对不起,我错过了设置 newValue。我已经对其进行了编辑以包括在内。
-
嗨 Trebor——我认为你误解了 .net 中不可变字符串的含义。您仍然可以为字符串变量分配新值——该变量不是只读的,也不是初始化一次。不变性只是意味着 1. 每次为字符串变量分配新值时,都会在后台分配一个新字符串,以及 2. 您不能只更改字符串的一个字符,例如 newValue[2] = ' g';
-
Chris 和 JMarsch,你们每个人都用我不理解的东西击中了它的头。我在之前的任务中遇到了不变性问题,并认为它们是不可更改的,并且您无法为它们分配新值。所以我写了一个演示只是为了尝试证明我认为是真的,然后发现我完全错误地认为它实际上是如何工作的。感谢您的澄清!