在c#中不带多条件的情况下向listview添加项目

本文关键字:情况下 listview 添加 项目 条件 | 更新日期: 2023-09-27 18:07:05

我写了一个程序来在ListView中对"所有Windows安装的软件"进行排序,我使用下面的代码来获得所有安装的软件的列表。

string uninstallKey = @"SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall";
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
    {
        foreach (string skName in rk.GetSubKeyNames())
        {
            using (RegistryKey sk = rk.OpenSubKey(skName))
            {
                try
                {
                    string[] row = { sk.GetValue("DisplayName").ToString()};
                    var listViewItem = new ListViewItem(row);
                    lstDisplayHardware.Items.Add(listViewItem);
                }
                catch (Exception ex)
                { }
            }
        }
        label1.Text += " (" + lstDisplayHardware.Items.Count.ToString() + ")";
    } 

注意:这段代码显示了所有安装的程序,其中有大约145案例。

之后,我决定将程序大小排序在其名称附近,因此我将第6行修改如下:

string[] row = { sk.GetValue("DisplayName").ToString() , sk.GetValue("EstimatedSize").ToString() };

现在的问题是新结果的计数94例。当我使用这个新代码,我的程序只是显示结果,这两个DisplayName & EstimatedSize,但因为一些程序没有EstimatedSize属性,所以他们从结果中省略,我的结果计数从145减少到96。我能做什么?

在c#中不带多条件的情况下向listview添加项目

GetValue状态的文档

如果注册表中不存在名称/值对则返回null

因此,您应该首先检查是否为空。

var displayName = sk.GetValue("DisplayName");
var size = sk.GetValue("EstimatedSize");
ListViewItem item;
if(displayName != null)
{
    if(size != null)
         item = new ListViewItem(new string [] {displayName.ToString(), 
                                                       size.ToString()});
    else
         item = new ListViewItem(new string [] {displayName.ToString()});
    lstDisplayHardware.Items.Add(item);
}

如果你需要检查多个属性…根据你的评论,我建议类似的事情

var stringsToCheck  = new string [] { "DisplayName", "SomethingElse", 
                                      "AndSomethingElse" };
List<string> items = new List<string>();
foreach(var s in stringsToCheck)
{
     var val = sk.GetValue(s);
     if(val != null)
         items.Add(val.ToString());
}
var listViewItem = new ListViewItem(items.ToArray());

注意:ToArray可能不需要