【问题标题】:How can I use a variable used in a function for something outside of that function?如何将函数中使用的变量用于该函数之外的内容?
【发布时间】:2014-06-06 03:18:33
【问题描述】:

我是 C# 的初学者,基本上我正在尝试制作一个简单的程序,允许您单击按钮来随机化角色的种族和类别。令人惊讶的是,实际上设置随机化器并不是问题。我成功地创建了该程序,但为了使其更复杂,我添加了一个图片框,该图片框将显示该随机化的示例。基本上我是这样设置的:

private void button1_Click(object sender, EventArgs e)
    {
        var r = new Random();
        var classText = r.Next(1, 7);
        if (classText == 1)
        {
            textBox1.Text = "Mage";
        }
        else if (classText == 2)
        {
            textBox1.Text = "Rogue";
        }
        else if (classText == 3)
        {
            textBox1.Text = "Ranger";
        }
    }

    private void button2_Click_1(object sender, EventArgs e)
    {
        var r2 = new Random();
        var raceText = r2.Next(1, 10);
        if (raceText == 1)
        {
            textBox2.Text = "Human";
        }
        else if (raceText == 2)
        {
            textBox2.Text = "Dwarf";
        }
        else if (raceText == 3)
        {
            textBox2.Text = "Elf";
        }
    }

    if(classText == 1 && raceText == 1)
    {
        pictureBox2.ImageLocation = whatever;
    }
    else if (classText == 1 && raceText == 2)
    {
        textBox2.Text = "Elf";
    }
    else if (classText == 2 && raceText == 3)
    {
        pictureBox2.ImageLocation = whatever;
    }
    etc........

然而,最后一个 if 语句不起作用,因为我使用的变量在它们各自的函数之外是不可访问的。我需要一种能够在 if 语句中使用这些变量的方法,以便我可以告诉它放哪张图片。有没有像在 python 中那样“返回”一个变量,还是有更好的方法?

【问题讨论】:

  • 与您的问题无关,但我强烈建议您了解enums。您应该为班级定义一个enum,为种族定义另一个。然后,您可以将随机数直接转换为枚举值,并将它们直接分配给该类型的变量或属性。它们为您提供了使用字符串的优势、使用整数的优势等等。

标签: c# variables


【解决方案1】:

这都是关于范围的,您应该阅读一下。基本上,变量只存在于声明它的块内。如果您在方法内声明变量,则它仅存在于该方法内。如果您希望能够在方法之外使用变量,则必须在该方法之外声明它。如果您想在多个方法中使用同一个变量,则必须在所有方法之外声明它,即在类级别。

【讨论】:

  • 考虑到这一点,您不应该在每个方法中声明一个单独的Random 变量并每次都创建一个新的Random 对象。这有潜在的问题。您应该在类级别声明一个变量并创建一个对象,然后每次都使用它们。
  • 我试过了,但是每当我在类级别声明一个 var 时,它都会显示“找不到类型或命名空间 var”。我是否需要使用这些枚举的东西才能让它工作?
  • 您只能在方法中使用var。对于类或结构级别的字段,您需要自己明确说明类型。
  • 好吧,现在我遇到了不同的问题。而不是“var r = new Random();”在函数中,我有“Random r = new Random();”在课堂上。新的问题是替换“var classText = r.Next(1, 7);”之后与“int classText = r.Next(1, 7);”它说它不能引用静态字段、方法或属性“r”。我现在该怎么办?
  • 想想你在做什么。需要时生成随机数。没有人说只为这些变量生成一次值。据说您在类级别声明变量,而不是在类级别为它们分配值。如果您这样做,那么他们将永远只有一个价值,并且每个玩家都将是相同的。在类级别声明变量并将它们的值设置在您最初的位置。
猜你喜欢
  • 2022-08-21
  • 1970-01-01
  • 2013-05-02
  • 2013-01-02
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
相关资源
最近更新 更多