C#本地复制变量值不断变化

时间:2012-05-05 07:13:18

标签: c# .net

我正在用字符串面对这个奇怪的问题。

我分配了一个这样的字符串:

string temp = DateTime.UtcNow.ToString("s");
_snapShotTime = string.Copy(temp);

//here threads started....
//while thread progressing I am passing  _snapShotTime to create a directory.
//same in second threads.

但是本地私有变量_snapShotTime的时间不断变化。我不知道为什么。我在其中使用了局部变量和复制值。

由于

3 个答案:

答案 0 :(得分:1)

我怀疑你的线程使用了捕获 _snapShotTime的lambda表达式(或匿名函数)。这确实可以让它改变。没有任何代码,很难肯定地说。

如果这个 问题,通常你指的是在循环外声明的捕获变量,但在循环的每次迭代时都会改变。您可以通过声明一个新变量来解决这个问题,该变量将原始变量的副本放在循环中,并且仅在lambda表达式中使用该复制变量。

,每次迭代都会在循环内部获得一个“新”变量,这样你就不会有问题了。

答案 1 :(得分:0)

你为什么不这样做

_snapShotTime = DateTime.UtcNow.ToString("s");

此外,在该行上放置一个断点,看看它何时被调用。

当它确实破裂时,看到堆栈,它将澄清事情。

  

我怀疑你的线程改变了_snapShotTime

的值

答案 2 :(得分:0)

字符串是不可变的,除非将变量重新分配给新字符串,否则它们不会更改。

我们需要查看更多代码才能帮助查明问题。