如何将多个字符串添加到列表<字符串[]>
本文关键字:字符串 列表 添加 | 更新日期: 2023-09-27 18:32:51
我想在不使用字符串数组的情况下将两个字符串添加到 string[] 列表中。我使用了一个名为str的字符串数组,但我想将 d.Name 和d.AvailableFreeSpace直接添加到列表中。有没有办法做到这一点?
public static List<string[]> GetReadyDrives()
{
DriveInfo[] drives = DriveInfo.GetDrives();
List<DriveInfo> readyDrives = new List<DriveInfo>();
List<string[]> parsedReadyDrives = new List<string[]>();
for (int i = 0; i < drives.Length; i++)
{
if (drives[i].IsReady)
{
readyDrives.Add(drives[i]);
}
}
foreach (DriveInfo d in readyDrives)
{
string[] str=new string[2];
str[0] = d.Name;
str[1] = d.AvailableFreeSpace.ToString();
parsedReadyDrives.Add(str);
}
return parsedReadyDrives;
}
public static List<string[]> GetReadyDrives()
{
return DriveInfo.GetDrives()
.Where(d => d.IsReady)
.Select(d => new[] { d.Name, d.AvailableFreeSpace.ToString() })
.ToList();
}
。但是,老实说,你最好这样做:
class ReadyDriveInfo
{
public string Name { get; set; }
public string AvailableFreeSpace { get; set; }
}
public static List<ReadyDriveInfo> GetReadyDrives()
{
return DriveInfo.GetDrives()
.Where(d => d.IsReady)
.Select(d => new ReadyDriveInfo
{
Name = d.Name,
AvailableFreeSpace = d.AvailableFreeSpace.ToString()
})
.ToList();
}
。但是,即使在那里,为什么您希望可用空间作为字符串?
List<string[]>
的每个元素都是string[]
的实例。因此,如果您想单独添加string
,则不能。但是您可以将它们作为单个元素添加到 string[]
的单元素实例中。因此:
parsedReadyDrives.Add(new[] { d.Name });
parsedReadyDrives.Add(new[] { d.AvailableFreeSpace.ToString());
如果你想让它们作为string[]
的双元素实例的两个元素,你会说:
parsedReadyDrives.Add(new[] { d.Name, d.AvailableFreeSpace.ToString() });
坦率地说,我认为传递List<string[]>
真的很讨厌。一个主要问题是,你给调用者带来了非常沉重的负担,要密切了解List<string[]>
的结构以及每个元素的每个元素的含义。此外,更改它并不可靠(如果您想更改List<string[]>
中任何元素的任何一个元素的含义,或者如果您想添加其他元素,您将面临维护噩梦。 您可能需要考虑一种更正式的数据结构,以更恰当地封装您的问题。
你不能这样做吗?
parsedReadyDrives.Add(new []{d.Name, d.AvailableFreeSpace.ToString()});
不过,这只是句法糖。
您的列表由字符串数组组成,因此不,您不能向列表中添加不是字符串数组的内容。
您可以创建一个由两个字符串组成的对象,如果这对您要执行的操作更有意义,但您仍然必须在添加之前初始化该对象。
是的,你可以这样做:
parsedReadyDrives.Add(new string[]{d.Name, d.AvailableFreeSpace.ToString()});
因此,请尝试使用一些 LINQ。而不是你的代码,尝试这样做来返回你想要的东西:
return DriveInfo.GetDrives().Where(x => x.IsReady).Select(x => new string[]{x.Name, x.AvailableFreeSpace.ToString()}.ToList();
您可以使用单个 LINQ 查询来执行此操作:
public static List<string[]> GetReadyDrives()
{
return DriveInfo.GetDrives()
.Where(d => d.IsReady)
.Select(d => new string[] { d.Name, d.AvailableFreeSpace.ToString() })
.ToList();
}
更新:我会拆分找到现成驱动器的代码和准备写入文件的代码。在这种情况下,我不需要查看内部方法来了解字符串数组中包含的内容:
public static IEnumerable<DriveInfo> GetReadyDrives()
{
return DriveInfo.GetDrives()
.Where(d => d.IsReady);
}
然后只需写下您需要的内容:
foreach(var drive in GetReadyDrives())
WriteToFile(drive.Name, drive.AvailableFreeSpace);
甚至这样(但我喜欢更多带有描述性方法名称的选项):
foreach(var drive in DriveInfo.GetDrives().Where(d => d.IsReady))
WriteToFile(drive.Name, drive.AvailableFreeSpace);