我有一点C#初学者问题.但我很确定它很容易解决.
foreach(var test in Tests)
{
object testObj = new object();
//Do something with the object
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,每次我循环时对象testObj都会被覆盖.是否有可能不是每次都覆盖它?或者我必须使用数组?
编辑:好的抱歉,我会尝试更具体:我的目标是在这个循环中创建一些对象然后我用每个对象调用一个新线程.在那里,我想对对象做点什么,当我完成时,我想释放它.
托马斯的Edit2:
foreach (var test in Tests)
{
object testObj = new object();
//Set some properties of the object
Thread t = new Thread(() => manager(testObj));
t.Start();
}
public void manager(object testObj)
{
//Do something with the object
//Release it
}
Run Code Online (Sandbox Code Playgroud)
你的问题有两个问题.
从而
object testObj
foreach(var test in Tests)
{
testObj = new object();
//Do something with the object
}
Run Code Online (Sandbox Code Playgroud)
将解决这个问题,因为testObj是在循环外部定义的,因此无论迭代是否与设置的值一起生效.
然后
所以你可以这样做:
List testObjList = new List();
foreach (var tests in Tests)
{
testObjList.Add(new object());
// Or alternatively object testObj = new object(); testObjList.Add(testObj);
}
Run Code Online (Sandbox Code Playgroud)
如果将其直接添加到列表中(添加(新对象)),则可以使用testObjList[testObjList.Count - 1] (count-1作为索引从0开始而不是1)来访问它.这与使用第二个变体的testObj时相同.
编辑:要在线程中使用它们然后消除这些对象,您有2个选项.
1.)该对象没有任何处理功能,那么您的原始代码就可以了:
foreach(var test in Tests)
{
object testObj = new object();
//Do something with the object
}
Run Code Online (Sandbox Code Playgroud)
当块结束时,对象丢失但是垃圾收集器决定它何时被真正删除(有一些例外,例如图像,你可能需要进行特殊操作以便能够删除它们).
如果你的对象是一个特定的类(让我们称之为myobject,以免它与普通对象混淆),它具有一个dispose功能,它提供:
foreach(var test in Tests)
{
using (myObject testObj = new myObject())
{
//Do something with the object
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着myObject对象只存在于using块中,另外当块结束时(即使通过异常)执行dispose部分,这应该确保垃圾收集器能够释放内存.