【问题标题】:How to make this code more functional or 'prettier'如何使此代码更实用或更“漂亮”
【发布时间】:2019-12-06 05:26:02
【问题描述】:

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

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

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

我也试过了

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

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

请帮忙:(

【问题讨论】:

    标签: c# string parsing int pretty-print


    【解决方案1】:

    您说您希望将列表视图子项中的文本转换为 int,然后在循环中使用

    so - 首先创建循环变量 i,然后在循环中为它分配 3 个不同的值,其中 2 个被 i++ 否定。没有任何意义,您不应该那样操作循环变量(除非了解您在做什么)。

    如果你稍微移动一下语句..

    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 并使用了一个不同的循环变量,所以你的循环变量和解析的值不一样,这可能是错误的。

    【讨论】:

    • 非常感谢!老实说,甚至没有意识到 if 语句本身是一个问题。 +1
    • 不客气,比利,很高兴能帮上忙。祝你的项目好运。
    【解决方案2】:

    也许这会给你一个想法。您可以从 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-24
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 2020-11-21
      • 2020-02-13
      • 2020-06-28
      • 2020-10-19
      • 2021-05-07
      相关资源
      最近更新 更多