-2

我有一个循环存储创建对象并存储它们。有 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 个实例,而不是不同的实例。

编辑:对不起,我的问题是如何获取存储的文件对象的唯一实例。

我没有写下业务逻辑,因为它没有为问题带来洞察力。

至于这里的课程,它们是:

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;
    }
}
4

1 回答 1

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属性。如果没有,请为您的类型选择正确的属性。

于 2012-08-21T13:52:00.853 回答