我有一个存储创建对象并存储它们的循环。有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;
}
}
答案 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
对象具有Var1
和Var2
属性。如果没有,请为您的类型选择正确的属性。