我有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
答案 0 :(得分:0)
您有3个项目,因此最大索引为2,因为数组的索引从0开始计数。
子项目的原理相同。
使用Items[2]
和SubItems[0]
if (listView1.Items[2].SubItems[0].Text == string.Empty)
答案 1 :(得分:0)
C#的索引从0开始,因此具有3个项目的集合将具有0
,1
和2
的索引。根据您的问题,您的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;