C#在循环中覆盖旧对象

时间:2012-08-21 13:47:35

标签: c# memory loops

我有一个存储创建对象并存储它们的循环。有3个类,还有很多代码,所以我将给出亮点: 在主要课程中:

 public static List<TaskIDHolder> mainHolders = new List<TaskIDHolder> ();

我的循环是这样的:

 foreach (string aDir in directories){
 //Variables
 string var1= "";
 int var2= 0;

 //Buisness Logic


 //Storage
        Boolean newTaskID = true;
        foreach (TaskIDHolder taskIDHolder in mainHolders)
        {
            if (taskIDHolder.getTaskID().Equals(taskID))
            {
                //Add obj
                File newFile = new File(var1, var2);
                taskIDHolder.addFile(newFile);
                newTaskID = false;
            }
        }
        if (newTaskID)
        {
            //Create Holder
            File newFile = new File(var1, var2);
            TaskIDHolder newHolder = new TaskIDHolder(taskID, newFile);
            //Add Holder
            mainHolders.Add(newHolder);
        }    

 }

现在我的其他类是File和TaskIDHolder。现在我在TaskIDHolder中获得了同一文件的9个实例,而不是不同的实例。

编辑:对不起,我的问题是我如何才能获得存储的File对象的唯一实例。

我没有写下商业逻辑,因为它没有对这个问题有所了解。

至于这里的课程:

class File
{
    public static string var1;
    public static int var2;

    public File(string avar1, int avar2)
    {
        var1 = avar1;
        var2 = avar2;
    }

    public string getVar1()
    {
        return var1;
    }

    public int getVar2()
    {
        return var2;
    }
}

class TaskIDHolder
{
    public static List<File> files = null;
    public static string taskID = "";

    public TaskIDHolder(string aTaskID, File aFile)
    {
        taskID = aTaskID;
        files = new List<File>();
        files.Add(aFile);
    }

    public void addFile(File aFile)
    {
        files.Add(aFile);
    }

    public string getTaskID()
    {
        return taskID;
    }

    public List<File> getFiles()
    {
        return files;
    }
}

1 个答案:

答案 0 :(得分:1)

概率要求类似(伪代码):

 if (newTaskID)
 {
   //find a file in the collection
   File newFile = taskIDHolder.Where(file=>file.Var1 == var1 && file.Var2==var2).SingleOrDefault<File>();

   //can not find it, so create a new one
   if(newFile==null)
       newFile = new File(var1, var2);

   TaskIDHolder newHolder = new TaskIDHolder(taskID, newFile);
   //Add Holder
   mainHolders.Add(newHolder);
  }    

请注意,我假设 File对象具有Var1Var2属性。如果没有,请为您的类型选择正确的属性。

相关问题