C# 3组对应的字符串。如何储存最好?
我使用foreach循环和Directory.GetFiles()来收集有关目录中文件的一些信息。我想存储3个字符串:文件名、文件路径、目录名。我可以得到这些信息,但我想知道存储数据的最佳方式是什么 我希望能够查找其中一个字符串,并轻松找到其他字符串。例如,如果它们在3个数组中,我可以使用forloop扫描Filename数组,发现我想要的条目位于索引45处。然后,我可以使用FilePath[45],DirectoryName[45]来获取其他两个数组中的条目C# 3组对应的字符串。如何储存最好?,c#,.net,C#,.net,我使用foreach循环和Directory.GetFiles()来收集有关目录中文件的一些信息。我想存储3个字符串:文件名、文件路径、目录名。我可以得到这些信息,但我想知道存储数据的最佳方式是什么 我希望能够查找其中一个字符串,并轻松找到其他字符串。例如,如果它们在3个数组中,我可以使用forloop扫描Filename数组,发现我想要的条目位于索引45处。然后,我可以使用FilePath[45],DirectoryName[45]来获取其他两个数组中的条目 这是存储这些字符串最有效的方法吗?
这是存储这些字符串最有效的方法吗?如果是这样的话,假设在另一种情况下,我事先无法使用GetFiles()方法获得数组的大小,那么列表是合适的替代方法吗?如果有三个关联的值,请将它们封装在一个类型中。它不必是一个特别复杂的类型,尽管我可能会使它不可变——只需从构造函数初始化三个属性。最棘手的一点是命名它,因为
FileInfo
已经是System.IO
的一部分。。。但是,假设您选择了FileData
的(糟糕的)名称:
public sealed class FileData
{
// Or use private readonly string variables and getter-only properties
public string FileName { get; private set; }
public string Path { get; private set; }
public string DirectoryName { get; private set; }
public FileData(string fileName, string path, string directoryName)
{
FileName = fileName;
Path = path;
DirectoryName = directoryName;
}
// Optional: override methods from System.Object.
// ToString might be really handy; Equals/GetHashCode less likely.
}
这不会像三个单独的阵列那样高效(在内存方面),但它将是一个更实用的场景,特别是在LINQ中。将不处理单独阵列所获得的时间花在优化真正重要的位上。字符串占用的内存可能会使容器对象的开销相形见绌
您可以将其设置为结构而不是类,这样在某些方面效率会稍高,而在其他方面效率会稍低。我通常使用一个类,除非我有充分的理由不这样做
是的,我通常使用列表而不是数组-
有一件事让我有点困扰:这三条信息是真正正交的,还是可以从目录名和文件名构造完整路径?如果是这样,您可能应该只存储前两个值,并在需要时构造第三个值。您可以创建一个结构来保存这三个值,将它们全部放在一个列表中,然后使用Linq选择正确的项
您也可以使用这完美地回答了我的问题。非常感谢。根据您的解决方案,也许值得一看内置的FileInfo类