我正在用字符串面对这个奇怪的问题。
我分配了一个这样的字符串:
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
的时间不断变化。我不知道为什么。我在其中使用了局部变量和复制值。
由于
答案 0 :(得分:1)
我怀疑你的线程使用了捕获 _snapShotTime
的lambda表达式(或匿名函数)。这确实可以让它改变。没有任何代码,很难肯定地说。
如果这个 问题,通常你指的是在循环外声明的捕获变量,但在循环的每次迭代时都会改变。您可以通过声明一个新变量来解决这个问题,该变量将原始变量的副本放在循环中,并且仅在lambda表达式中使用该复制变量。
,每次迭代都会在循环内部获得一个“新”变量,这样你就不会有问题了。答案 1 :(得分:0)
你为什么不这样做
_snapShotTime = DateTime.UtcNow.ToString("s");
此外,在该行上放置一个断点,看看它何时被调用。
当它确实破裂时,看到堆栈,它将澄清事情。
我怀疑你的线程改变了_snapShotTime
的值
答案 2 :(得分:0)
字符串是不可变的,除非将变量重新分配给新字符串,否则它们不会更改。
我们需要查看更多代码才能帮助查明问题。