Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 3组对应的字符串。如何储存最好?_C#_.net - Fatal编程技术网

C# 3组对应的字符串。如何储存最好?

C# 3组对应的字符串。如何储存最好?,c#,.net,C#,.net,我使用foreach循环和Directory.GetFiles()来收集有关目录中文件的一些信息。我想存储3个字符串:文件名、文件路径、目录名。我可以得到这些信息,但我想知道存储数据的最佳方式是什么 我希望能够查找其中一个字符串,并轻松找到其他字符串。例如,如果它们在3个数组中,我可以使用forloop扫描Filename数组,发现我想要的条目位于索引45处。然后,我可以使用FilePath[45],DirectoryName[45]来获取其他两个数组中的条目 这是存储这些字符串最有效的方法吗?

我使用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类