如何让这段代码更实用或者'prettier'

How to make this code more functional or 'prettier'

我一直在做一个项目,我需要按下按钮来执行这一行。

if (listView1.SelectedItems[0].SubItems[3].Text == "0") //Checks to see Value
{
    listView1.SelectedItems[0].SubItems[3].Text = "1";// If Value is Greater, Increase and Change ListView
    questionNumberLabel.Text = listView1.SelectedItems[0].SubItems[3].Text;// Increase and Change Label
}

现在我重复了大约 10 次,每个值都增加 1。但我知道这很丑陋,而且功能失调。以及合并文件大小。我试过一些东西。主要是这个方法。

if (listView1.SelectedItems[0].SubItems[3].Text == "0")
{
    for (var i = 1; i < 100;)
    {
        if (!Int32.TryParse(listView1.SelectedItems[0].SubItems[3].Text, out i))
        {
            i = 0;
        }

        i++;

        listView1.SelectedItems[0].SubItems[3].Text = i.ToString();

        Console.WriteLine(i);
    }
}

但它不是只加一个,而是执行 100 个实例并结束。这成为 *** 痛苦的原因是因为

listView1.SelectedItems[0].SubItems[3].Text

只是 - 它是一个字符串,而不是一个整数。这就是我解析它并尝试 运行 那样的原因。但是还是没有我想要的结果

我也试过这个

string listViewItemToChange = listView1.SelectedItems[0].SubItems[3].Text;

然后解析字符串,使其更漂亮。它像以前一样工作,但仍然没有给我想要的结果。重申一下,我希望将从列表视图中获取的字符串更改为一个 int,在 for 循环中使用,添加 1,然后将其重新字符串化并输出到我的 listView。

请帮忙:(

您说您希望将 listview 子项中的文本转换为 int 然后在循环中使用

所以 - 首先你创建你的循环变量 i,然后在你的循环中你可能分配给它 3 个不同的值,其中 2 个被 i++ 取反。 None 这是有道理的,你不应该像那样操纵你的循环变量(除非你明白你在做什么)。

如果你稍微移动语句..

int itemsToCheck = 10; // "Now I have this repeated about 10 times "

for (var item = 0; item < itemsToCheck; item++)
        {
            int i;                
            if (!Int32.TryParse(listView1.SelectedItems[item].SubItems[3].Text, out i))
            {
                i = 0;
            }

            i++;

            listView1.SelectedItems[item].SubItems[3].Text = i.ToString();

            Console.WriteLine(i);
        }

您要查找的正是这些内容。我没有改变你的代码对 i 所做的事情,只是添加了一个循环计数 itemsToCheck 并使用了一个不同的循环变量,所以你的循环变量和解析值不相同,这可能会出现错误。

也许这会给你一个想法。您可以从 C# 7.0

开始使用此语法
var s = listView1.SelectedItems[0].SubItems[3].Text;
var isNumeric = int.TryParse(s, out int n);
if(isNumeric is true && n > 0){
   questionNumberLabel.Text = s;
}

快捷方式更多

var s = listView1.SelectedItems[0].SubItems[3].Text;     
if(int.TryParse(s, out int n) && n > 0){
   questionNumberLabel.Text = s;
}