问候,
我需要在我的类中包含一个属性,它是 System.IO.FileInfo 对象的集合。我不确定如何执行此操作以及如何从类的实例中添加和删除对象(我会假设像任何其他集合一样)。
如果我需要添加更多信息,请告诉我。
谢谢
更新:我是以错误的方式接近这个吗?我已阅读评论,将添加到作为属性的集合是不好的做法。如果这是真的,什么是好的做法?我有一堆需要存储在集合中的对象。在对其采取最终操作之前,将添加和删除该集合。这是一种正确的方法还是我错过了什么?
问候,
我需要在我的类中包含一个属性,它是 System.IO.FileInfo 对象的集合。我不确定如何执行此操作以及如何从类的实例中添加和删除对象(我会假设像任何其他集合一样)。
如果我需要添加更多信息,请告诉我。
谢谢
更新:我是以错误的方式接近这个吗?我已阅读评论,将添加到作为属性的集合是不好的做法。如果这是真的,什么是好的做法?我有一堆需要存储在集合中的对象。在对其采取最终操作之前,将添加和删除该集合。这是一种正确的方法还是我错过了什么?
File
是一个静态类。所以让我们假设你的意思是FileInfo
.
有很多方法,你可以:
例如,
class Foo {
public IEnumerable<FileInfo> LotsOfFile {
get {
for (int i=0; i < 100; i++) {
yield return new FileInfo("C:\\" + i + ".txt");
}
}
}
private List<FileInfo> files = new List<FileInfo>();
public List<FileInfo> MoreFiles {
get {
return files;
}
}
public ReadOnlyCollection<FileInfo> MoreFilesReadOnly {
get {
return files.AsReadOnly();
}
}
}
使用此代码,您可以轻松添加到属性MoreFiles
:
Foo f = new Foo();
f.MoreFiles.Add(new FileInfo("foo.txt"));
f.MoreFiles.Add(new FileInfo("BAR.txt"));
f.MoreFiles.Add(new FileInfo("baz.txt"));
Console.WriteLine(f.MoreFiles.Count);
using System.Collections.ObjectModel;
public class Foo
{ private Collection<FileInfo> files = new Collection<FileInfo>();
public Collection<FileInfo> Files { get { return files;} }
}
//...
Foo f = new Foo();
f.Files.Add(file);
一种简单的方法是创建一个这样的属性(对不起 VB.Net)
Public ReadOnly Property Files As Generic.List(Of IO.File)
GET
Return _Files
END GET
END Property
其中 _Files 是 Generic.List(Of IO.File) 类型的私有类变量,它保存文件列表。这将允许通过调用 List 数据类型的函数来添加和删除文件。有些人可能会说这是不好的做法,你不应该公开集合本身,而是将所有必要的函数重新编码为单独的参数,这基本上只是从你的私有集合中调用适当的函数。
我只是把它做成一个列表或字典。我会展示两者。
class Example
{
public List<FileInfo> FileList { get; set; }
public Dictionary<string, FileInfo> Files { get; set; }
public Example()
{
FileList = new List<FileInfo>();
Files = new Dictionary<string, FileInfo>();
}
}
您现在将使用该属性,就好像它是实际的 List 或 Dictionary 对象一样。
var obj = new Example();
obj.FileList.Add(new FileInfo("file.txt")); // List<>
obj.Files.Add("file.txt", new FileInfo("file.txt")); // Dictionary<>
// also
obj.Files["file2.txt"] = new FileInfo("file2.txt"); // Dictionary<>
// fetch
var myListedFile = obj.FileList[0]; // List<>
var myFile = obj.Files["file.txt"]; // Dictionary<>
我更喜欢字典方法。
请注意,由于该属性是公共设置的,因此您也可以替换整个列表或字典。
obj.Files = new Dictionary<string, FileInfo>();
// or
var otherFiles = new Dictionary<string, FileInfo>();
otherFiles["otherfile.txt"] = new FileInfo("otherfile.txt");
obj.Files = otherFiles;
如果您将属性设为私有集,那么您仍然可以调用 Add(),但不能重新分配列表或字典本身。