-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 つのインスタンスが取得されます。

編集: 申し訳ありませんが、私の質問は、保存されている 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;
    }
}
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);
  }    

オブジェクトがとプロパティを持っていると仮定したことに注意してください。そうでない場合は、タイプの正しいプロパティを選択してください。FileVar1Var2

于 2012-08-21T13:52:00.853 に答える