Mda*_*nde 0 c# arrays sorting multidimensional-array
我已通过 WMI 读取了远程 PC 上安装的程序。我已读取“程序名称”、“程序发布者”、“程序安装日期”和“程序安装路径”属性,并将它们分别存储在单独的字符串数组中。(所有长度相同的数组:99)
我想按照程序名称的字母顺序列出程序信息。是否可以在不将 4 个数组合并到一个多维数组中的情况下实现这一点?或者我应该首先将数组合并为一个二维数组?如果是的话怎么办?
由于我是 C# 新手,如果您能提出建议,我将非常感谢。我读过很多文章,但我感到更加困惑。
public string[] Programs_WMI_name = new string[99];
public string[] Programs_WMI_publisher = new string[99];
public string[] Programs_WMI_installdate = new string[99];
public string[] Programs_WMI_installlocation = new string[99];
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个但出现错误:
在我的公开课上
public class TagService{
public string Programs_WMI_Name { get; set; }
public string Programs_WMI_Publisher { get; set; }
public string Programs_WMI_Installdate { get; set; }
public string Programs_WMI_Installlocation { get; set; }
public List<string> programs = new List<string>(99);
}
Run Code Online (Sandbox Code Playgroud)
然后
for (int i = 0; i < TagService.Programs_WMI_name.Length; i++)
{
programs.Add(new TagService
{
Programs_WMI_Name = TagService.Programs_WMI_name[i],
Programs_WMI_Publisher = TagService.Programs_WMI_publisher[i],
Programs_WMI_Installdate = TagService.Programs_WMI_installdate[i],
Programs_WMI_Installlocation = TagService.Programs_WMI_installlocation[i],
});
}
programs = programs.OrderBy(p => p.Programs_WMI_Name).ToList();
Run Code Online (Sandbox Code Playgroud)
为自己和他人一个忙,利用课程
public class ProgramInfo
{
public string Name { get; set; }
public string Publisher { get; set; }
public string InstallDate { get; set; }
public string InstallLocation { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
来自数组
var programs = new List<ProgramInfo>(Programs_WMI_name.Length);
for (int i = 0; i < Programs_WMI_name.Length; i++)
{
programs.Add(new ProgramInfo
{
Name = Programs_WMI_name[i],
Publisher = Programs_WMI_publisher[i],
InstallDate = Programs_WMI_installdate[i],
InstallLocation = Programs_WMI_installlocation[i],
});
}
Run Code Online (Sandbox Code Playgroud)
最好直接从查询中填写
var programs = new List<ProgramInfo>();
foreach (var row in new ManagementObjectSearcher(somequery).Get())
{
programs.Add(new ProgramInfo
{
Name = row["name"],
Publisher = row["publisher"],
InstallDate = row["installdate"],
InstallLocation = row["installlocation"],
});
}
Run Code Online (Sandbox Code Playgroud)
完整的示例可能如下所示
using System;
using System.Linq;
using System.Collections.Generic;
namespace Test
{
public class ProgramInfo
{
public string Name { get; set; }
public string Publisher { get; set; }
public string InstallDate { get; set; }
public string InstallLocation { get; set; }
}
public class TagService
{
public static List<ProgramInfo> Programs { get; } = new List<ProgramInfo>();
public static void RefreshPrograms()
{
Programs.Clear();
foreach (var row in new ManagementObjectSearcher(somequery).Get())
{
programs.Add(new ProgramInfo
{
Name = row["name"],
Publisher = row["publisher"],
InstallDate = row["installdate"],
InstallLocation = row["installlocation"],
});
}
Programs.Sort((l, r) => string.Compare(l.Name, r.Name));
}
}
public Program
{
public static void Main()
{
TagService.ReadPrograms();
var properties = typeof(ProgramInfo).GetProperties();
Console.WriteLine(string.Join("|", properties.Select(p => p.Name.PaddRight(10))));
foreach (var program in TagService.Programs)
{
Console.WriteLine(string.Join("|", properties.Select(p => ((string)p.GetValue(program)).PaddRight(10))));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)