【问题标题】:how to make objects using an index number如何使用索引号制作对象
【发布时间】:2017-05-31 08:03:54
【问题描述】:

我想让我的程序比现在更短。 我制作了 8 个不同的对象并用它们做事,但我想用 for 循环和索引号之类的东西来制作它。 有没有办法做到这一点,因为我已经查过了,但似乎没有找到任何东西。

物品之类的东西是荷兰语,对此感到抱歉。

private void AankomstButton_Click(object sender, EventArgs e)
    {
        if (welkKind == 1)
        {
            if (File.Exists(@"Bestanden/" + kind1.Naam + "_" + DateTime.Now.ToString("Y") + ".txt") == false)
            {
                using (StreamWriter sw = new StreamWriter(@"Bestanden/" + kind2.Naam + "_" + DateTime.Now.ToString("Y") + ".txt")) ;

            }
            else
            {
                using (StreamWriter sw = File.AppendText(@"Bestanden/" + kind2.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
                {

                    sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
                }                   

            }
        }


        if (welkKind == 2)
        {
            if (File.Exists(@"Bestanden/" + kind2.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
            {
                using (StreamWriter sw = File.AppendText(@"Bestanden/" + kind2.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
                {
                    sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
                }
            }
            else
            {
                using (StreamWriter sw = new StreamWriter(@"Bestanden/" + kind2.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
                {
                    sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
                }
            }
        }
        if (welkKind == 3)
        {
            if (File.Exists(@"Bestanden/" + kind3.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
            {
                using (StreamWriter sw = File.AppendText(@"Bestanden/" + kind3.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
                {
                    sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
                }
            }
            else
            {
                using (StreamWriter sw = new StreamWriter(@"Bestanden/" + kind3.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
                {
                    sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
                }
            }
        }
        if (welkKind == 4)
        {
            if (File.Exists(@"Bestanden/" + kind4.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
            {
                using (StreamWriter sw = File.AppendText(@"Bestanden/" + kind4.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
                {
                    sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
                }
            }
            else
            {
                using (StreamWriter sw = new StreamWriter(@"Bestanden/" + kind4.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
                {
                    sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
                }
            }
        }
        if (welkKind == 5)
        {
            if (File.Exists(@"Bestanden/" + kind5.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
            {
                using (StreamWriter sw = File.AppendText(@"Bestanden/" + kind5.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
                {
                    sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
                }
            }
            else
            {
                using (StreamWriter sw = new StreamWriter(@"Bestanden/" + kind5.Naam + "_" + DateTime.Now.ToString("Y") + ".txt"))
                {
                    sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
                }
            }
        }

【问题讨论】:

  • 什么是 kind2.naam?它是类的资源还是属性?

标签: c# object indexing


【解决方案1】:

如果您保留一个子数组 (kind),则可以通过索引访问该数组。

Kind[] children = new Kind[] { kind1, kind2 };

if (welkKind >= 0 && welkKind < children.Length)
{
    Kind kind = children[welkKind];

    string fileName = @"Bestanden/" + kind.Naam + "_" + DateTime.Now.ToString("Y") + ".txt";
    if (File.Exists(fileName))
    {
        using (StreamWriter sw = new StreamWriter(fileName))
        {
            sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
        }
    }
    else
    {
        using (StreamWriter sw = File.AppendText(fileName))
        {
            sw.WriteLine(DateTime.Now.ToString("d") + " Aangekomen: " + DateTime.Now.ToString("t"));
        }
    }
}

另一个选项是列表,它的使用语法类似,但您可以动态添加和删除列表中的项目:

List<Kind> children = new List<Kind>();
children.Add(kind1);
children.Add(kind2);
children.Add(new Kind() { Naam = "John" });

if (welkKind >= 0 && welkKind < children.Count)
{
    Kind kind = children[welkKind];
}

【讨论】:

  • 如果您的代码中有类似的实例用于类似的目的,那么将它们保存在某种集合中几乎肯定比单独的变量(kind1、kind2 等)更好。跨度>
  • 当然可以,但是那些变量现在已经存在了,所以他必须在某个地方添加 then。
  • 我同意您的解决方案。不仅在方法中,还需要对变量进行重构。
  • 非常感谢!我最近才学会如何使用对象等,所以这对我很有帮助,我现在会把它记在脑海里!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2020-03-03
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 2021-06-07
相关资源
最近更新 更多