检查listView的项目是否为String.Empty

时间:2018-08-30 15:57:21

标签: c# winforms listview

我有3个项目和1个子项目的列表视图

所以我想检查item [3]上的一行是否为String.Empty。

如果items [3]为空,则不会将我的items [3]传递给label1.Text。 如果items [3]不为空,它将把我的items [3]传递给我的label1.Text

这是我的代码

if (listView1.Items[3].SubItems[1].Text == string.Empty)
{
    label1.Text = "";
}
else
{
    label1.Text = listView1.Items[3].SubItems[1].Text;
}

当我的第三行为空时,我得到一个错误:InvalidArgument =值'3'对'索引'无效。

所以我如何检查行是否为空,如果行为空,我应该怎么做验证,我不会将项目传递给label1.Text,如果行不为空,它将项目传递给label1.Text

2 个答案:

答案 0 :(得分:0)

您有3个项目,因此最大索引为2,因为数组的索引从0开始计数。

子项目的原理相同。

使用Items[2]SubItems[0]

if (listView1.Items[2].SubItems[0].Text == string.Empty)

答案 1 :(得分:0)

C#的索引从0开始,因此具有3个项目的集合将具有012的索引。根据您的问题,您的if语句应如下所示:

if (listView1.Items[2].SubItems[0].Text == string.Empty)

当尝试通过其索引访问某些内容时,通常应进行某种安全检查,例如在尝试访问可能超出范围的内容之前先检查.Length.Count。您还可以利用一些Linq和null条件运算符使事情更安全(尽管自枚举以来速度稍慢):

//Skip 2, take the 3rd if its there then take the first SubItem. 
//label1.Text is either the text or an empty string
label1.Text = listView1.Items.Skip(2).FirstOrDefault()?.SubItems
                     .FirstOrDefault()?.Text ?? string.Empty;