在此scnario中,程序将xmlfiles放在目录中。如果已经在listToWatch列表中添加了xmlfile,则会在第二种方法中对其进行评估。但是,firstMethod也会循环用于评估每个目录(下面没有写入)。
程序检测xml文件中已添加的所有文件。但是如果程序进入另一个目录(因为firstMethod在另一个类中循环),则传递listToWatch = new List(),删除先前的listToWatch并创建一个新对象。
我希望使用相同的对象而不会被新列表覆盖。我不能将listToWatch = new List放在secondMethod中,因为它有一个for循环,它只会用一个新对象覆盖listToWatch。我不能把它放在firstMethod中,因为它需要在secondMethod中设置。我也不能把它放在类Sample中。我应该在哪里放listToWatch = new List()?
class Sample
{
public static List<string> listToWatch
{
get;
set;
}
public static void firstMethod()
{
string getFiles = Directory.GetFiles(directory, "*.xml");
foreach (string xmlFile in getFiles)
{
secondMethod(xmlFile);
}
}
public static void secondMethod(xmlFile)
{
listToWatch = new List<string>();
foreach (string file in xmlFile)
{
if (listToWatch.Contains(file))
{
sw.WriteLine(file + " is already added!");
}
else
{
listToWatch.add();
}
}
}
答案 0 :(得分:8)
如何将它与getter和setter一起使用?
private static List<string> _ListToWatch;
public static List<string> ListToWatch
{
get
{
if(_ListToWatch == null)
_ListToWatch = new List();
return _ListToWatch;
}
set
{
_ListToWatch = value;
}
}
必须说,可能是让方法返回此对象而不是存储它的更好选项,但如果由于某种原因你不能改变它,我认为这将有效
编辑:感谢@gorpik,这称为“ property ”而不是“使用getter和setter ”。
答案 1 :(得分:1)
您可以在静态构造函数中初始化listToWatch,也可以使用Gonzalo建议的方法。
class Sample
{
static Sample()
{
listToWatch = new List<string>();
}
public static List<string> listToWatch
{
get;
set;
}
public static void firstMethod()
{
string[] getFiles = Directory.GetFiles(directory, "*.xml");
foreach (string xmlFile in getFiles)
{
secondMethod(xmlFile);
}
}
public static void secondMethod(xmlFile)
{
foreach (string file in xmlFile)
{
if (listToWatch.Contains(file))
{
sw.WriteLine(file + " is already added!");
}
else
{
listToWatch.add();
}
}
}
}
答案 2 :(得分:1)
如果你没有关于冗余内存分配的偏执(如果是空的dir,空的xml - 不需要列表),只需在静态声明本身中初始化ListToWatch:
class Sample
{
private static List<string> listToWatch = new List<string>();
public static List<string> ListToWatch
{
get { return listToWatch; };
}
...
}
注意缺少的setter:只允许此类更改listToWatch引用。
答案 3 :(得分:0)
您只需将new List<string>()
语句移动到firstMethod
,这样就可以为它要添加的所有文件创建一次字符串列表。
答案 4 :(得分:0)
您只需创建一次此List,因此请在firstMethod上进行。 尝试隔离代码响应性。
我认为@ Gonzalo.-解决方案很有趣。
干杯